对不起,我是oop的新手。
class A(object):
def __init__(self, idn, name):
self.idn = idn
self.name = name
class B(object):
def __init__(self, idn, acc_no, criminal_case='No'):
self.idn = idn
self.acc_no = acc_no
self.criminal_case = criminal_case
def get_info(self):
return self.idn
class C(A, B):
pass
c = C(1, 'xyz')
print c.get_info()
print c.criminal_case
追踪(最近一次呼叫最后一次):
文件“tp.py”,第25行,
print c.criminal_case
AttributeError:'C'对象没有属性'criminal_case'
答案 0 :(得分:1)
Python不会为继承层次结构中的每个类调用__init__()
。相反,它只是在层次结构中搜索第一个 __init__()
并运行它。在代码中添加一些打印语句以便自己查看。
要从B.__init__
调用A
,您需要按照以下方式自行致电super()
。
super(A, self).__init__(idn, None)
但这没有多大意义:acc_no
应该来自哪里?也许你应该重新审视你的班级设计。
答案 1 :(得分:1)
在没有genpkey
的情况下使用多重继承几乎是不可能的,因此您需要使用super()
。
<强>超级()强>
返回将方法调用委托给父或者的代理对象 兄弟姐妹类型。这对于访问继承的方法很有用 在课堂上被覆盖的。
您的代码应该是这样的:
super()
你会得到输出:
class A(object):
def __init__(self, idn, name):
super(A, self).__init__(idn, name,'test')
self.idn = idn
self.name = name
在Python 3.x中你可以使用1
test
,而你似乎正在使用Python 2.x,所以你需要使用super().__init__()
。
希望这有帮助。