python 多继承冲突_当具有__slots__的类的多继承时,Python 3.6.5“多个库有实例布局冲突”...

简单地说,你就是做不到.

Multiple inheritance with multiple slotted parent classes can be used, but only one parent is allowed to have attributes created by slots (the other bases must have empty slot layouts) – violations raise TypeError.

__slots__背后的想法是为实例的内存布局中的每个属性保留特定的插槽. A和B正在尝试为slot1和slot2属性保留其内存布局的相同部分,并且C不能为两个属性保留相同的内存.它只是不兼容.

感谢JCode在评论中提到的,以下方法被修改为正确.

但总有办法,我个人更喜欢使用包含所有必需插槽的公共库,如果有多个继承类,则需要__slots__.

import pympler.asizeof

class base():

__slots__ = ['a','b']

class A(base):

__slots__ = []

class B(base):

__slots__ = []

class C(A,B):

__slots__ = []

class D():

pass

#Update

bb = base()

bb.a = 100

bb.b = 100

print(pympler.asizeof.asizeof(bb))

a = A()

a.a = 100

a.b = 100

print(pympler.asizeof.asizeof(a))

c = C()

c.a = 100

c.b = 100

print(pympler.asizeof.asizeof(c))

d = D()

d.a = 100

d.b = 100

print(pympler.asizeof.asizeof(d))

更新4个值将是88,88,88,312.虽然__slots__保留.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值