杨东明 发表于 2021-7-11 16:42:32

请问这个__base__怎么写的才对。。

class A:
    def get_a(self):
      print ('a')

class B:
    def get_b(self):
      print ('b')

class C:
    pass

C.__bases__ += (A, B, )

c = C()
c.get_a()
c.get_b()

Twilight6 发表于 2021-7-11 16:42:33

杨东明 发表于 2021-7-11 16:44
python 0基础入门里面的扩展阅读Mixin编程机制是这么写的,不过我运行就报错:TypeError: Cannot create a...



去网上搜索了下,将 C 类添加 A,B 类的方法时,C 类必须是继承非与 A、B 同类,且继承非 object 类

因为 Python 中的类默认继承 object 基类,所以你这里 C 类继承类与 A、B 类相同,导致报错

改成这样即可执行代码:

class A:
    def get_a(self):
      print ('a')

class B:
    def get_b(self):
      print ('b')

class C_:
    pass

class C(C_):
    pass

C.__bases__ += (A, B)

c = C()
c.get_a()
c.get_b()

杨东明 发表于 2021-7-11 16:44:11

python 0基础入门里面的扩展阅读Mixin编程机制是这么写的,不过我运行就报错:TypeError: Cannot create a consistent method resolution
order (MRO) for bases object, A, B

对A这么操作也是报错
A.__bases__ += (B,)
a.get_b()

杨东明 发表于 2021-7-12 15:31:13

Twilight6 发表于 2021-7-11 16:42
去网上搜索了下,将 C 类添加 A,B 类的方法时,C 类必须是继承非与 A、B 同类,且继承非 object 类
...

感谢{:9_231:}
页: [1]
查看完整版本: 请问这个__base__怎么写的才对。。