Python中的多重继承问题!

为什么c.print_a()输出’B’?

class A(object):
    def __init__(self):
        self.some_name = 'A'

    def print_a(self):
        print self.some_name

class B(object):
    def __init__(self):
        self.some_name = 'B'

    def print_b(self):
        print self.some_name

class C(A, B):
    def __init__(self):
        A.__init__(self)
        B.__init__(self)

if __name__ == '__main__':
    c = C()
    c.print_a()
class A(object):
    def __init__(self, some_name='A'):
        self.some_name = some_name

    def print_a(self):
        print self.some_name

class B(object):
    def __init__(self, some_name='B'):
        self.some_name = some_name

    def print_b(self):
        print self.some_name

class C(A, B):
    def __init__(self):
        A.__init__(self, some_name='AAAAA')
        B.__init__(self, some_name='BBBBB')

if __name__ == '__main__':
    c = C()
    c.print_a()

最佳答案 你这里只有一个对象; some_name属性在所有继承类的方法之间共享.你调用A .__ init__,将其设置为A,然后调用B .__ init__,将其更改为B.

另请注意,您正在调用基本方法;使用超级:

class A(object):
    def __init__(self):
        self.some_name = 'A'
        super(A, self).__init__()

    def print_a(self):
        print self.some_name

class B(object):
    def __init__(self):
        self.some_name = 'B'
        super(B, self).__init__()

    def print_b(self):
        print self.some_name

class C(A, B):
    def __init__(self):
        super(C, self).__init__()

if __name__ == '__main__':
    c = C()
    c.print_a()
点赞