Python 为什么';属性错误';当我已经继承基类时?

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

对不起,我是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行,在

打印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'?@AmitKarnik
super(A,self)。\uu init_uu(idn,name,'this is criminal_case')
,您将获得输出。