作者walelile (wakaka)
看板Python
标题[问题] class继承 & __init__
时间Sun Oct 25 20:48:07 2015
不好意思,这个问题我不会直接描述,要请大家看一段sample code
--
from collections import UserList
# Python 3.5's source code:
# class UserList(MutableSequence):
# def __init__(self, initlist):
# ...
# (no super().__init__() here)
# 这是一个重要的parent class
class A(object):
def __init__(self, data, name, **kwargs):
super().__init__(data, **kwargs)
self.name = name
# class B的__init__执行的时候不会有问题,因为super().__init__会用
# UserList.__init__(...)
class B(A, UserList):
def __init__(self, data, name, path, **kwargs):
super().__init__(data, name, **kwargs)
self.path = path
# 这里的__init__执行时候会出现error:
# object.__init__() takes no arguments
# 因为我在class A的__init__()中有呼叫super().__init__(data, **kwargs)
# 而其会对应到object.__init__() --> 不需要参数
class C(A):
def __init__(self, data, name, **kwargs):
super().__init__(data, name, **kwargs)
问题:
要如何解决class A __init__碰到的这种状况?
我目前的想法是用try ... except 去尝试两种不同的super().__init__(...)
有比较推荐的解法吗? 谢谢
※ 编辑: walelile (1.171.183.206), 10/25/2015 20:49:50
1F:→ tiefblau: 就把A的super里的data拿掉啊? 还是我误会了什麽 10/25 21:52
2F:→ AndCycle: 多重继承的 super 要指定 init 谁, 去看官方文件 10/26 00:45
3F:→ AndCycle: 而且你传入值都会变就自己处理吧, 介面的问题要自己来 10/26 00:46
4F:→ carlcarl: 不太懂 同一楼 10/26 01:08
因为A会跟UserList, UserDict等collections作搭配,而其__init__唯一的参数名不同,
所以我没办法直接用**kwargs,因此我用"data"当作pos arg,并传给collections。
把A __init__()中的data换成*args看起可以正常跑。
谢谢大家的指点
※ 编辑: walelile (1.171.183.206), 10/26/2015 05:22:07