Python 为什么';属性错误';当我已经继承基类时?
对不起,我是oop新手Python 为什么';属性错误';当我已经继承基类时?,python,python-2.7,oop,inheritance,Python,Python 2.7,Oop,Inheritance,对不起,我是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 se
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行,在
打印c.刑事案件
AttributeError:'C'对象没有属性'criminal\u case'Python不会为继承层次结构中的每个类调用
\uuu init\uuu()
。相反,它只是在层次结构中搜索first\uuuu init\uuuu()
,然后运行它。在代码中添加一些print语句,以便自己查看
要从A
调用B.\uuuuu init\uuuuu
,您需要自己调用super()
super(A, self).__init__(idn, None)
但这没有多大意义:acc\u no
的值应该来自哪里?也许你应该重新审视你的类设计。如果没有super()
,几乎不可能使用多重继承,所以你需要的是使用super()
super()
返回代理对象,该代理对象将方法调用委托给父对象或
类型的兄弟类。这对于访问继承的方法很有用
已在类中重写的
您的代码应该如下所示:
class A(object):
def __init__(self, idn, name):
super(A, self).__init__(idn, name,'test')
self.idn = idn
self.name = name
您将获得以下输出:
1
test
在Python3.x中,您可以只使用super()。\uuu init\uuu()
,而且您似乎在使用Python2.x,所以您需要使用super(A,self)。\uu init\uuu(idn,name)
希望这有帮助。您需要拨打
super
。但是你的继承结构没有多大意义。您希望B.\uuuuu init\uuuu
从何处获取其参数?您只需将两个传递给C
。第二个应该是name
还是acc\u no
?好的!但是我如何在C中调用B的init?谢谢,但是我如何访问B的属性'criminal_case'?@AmitKarniksuper(A,self)。\uu init_uu(idn,name,'this is criminal_case')
,您将获得输出。