python是否支持多重继承_python 多重继承的一个问题

2018-10-25

刚遇到一个问题。当类C继承类A和类B时,我希望super(C, self).__init__()能把类A和类B的初始化方法都调用一下,然而

class A(object):

def __init__(self):

self.a = 'a'

class B(object):

def __init__(self):

self.b = 'b'

class C(A, B):

def __init__(self):

super(C, self).__init__()

>>> c = C()

>>> c.a

'a'

>>> c.b

Traceback (most recent call last):

File "", line 1, in

c.b

AttributeError: 'C' object has no attribute 'b'

而如果强调类A、B均继承同一基类(即使是默认的object也行)的话,运行结果则如预期。

class A(object):

def __init__(self):

super(A, self).__init__()

self.a = 'a'

class B(object):

def __init__(self):

super(B, self).__init__()

self.b = 'b'

class C(A, B):

def __init__(self):

super(C, self).__init__()

>>> c = C()

>>> c.a

'a'

>>> c.b

'b'

如果手动在C类初始化方法中指明类A和类B的初始化方法,同样可行。

class A(object):

def __init__(self):

self.a = 'a'

class B(object):

def __init__(self):

self.b = 'b'

class C(A, B):

def __init__(self):

A.__init__(self)

B.__init__(self)

>>> c = C()

>>> c.a

'a'

>>> c.b

'b'

为什么第一个版本的代码不能如期望的那样执行?

另外,随手查了一下别人踩过的python多重继承的坑,除此之外还有很多。所以我还是重新设计一下类的结构,避免不必要的麻烦算了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值