Python 3 忽略元类指令?
Python 3 ignores metaclass directive?
已编辑
我有 2 个 class 继承自 ABC
,第三个 class 继承自两者,每个都在不同的文件中。试图将ABCMeta
的metaclass提供给最后一个class,以解决metaclasses的冲突,但同样失败
"TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases"
在这种情况下,为什么 python 会忽略 metaclass 指令,如何解决?
文件A:
from abc import ABC, abstractmethod
class A(ABC):
@abstractmethod
def method1(self):
pass
文件 B:
from abc import ABC, abstractmethod
class B(ABC):
@abstractmethod
def method2(self):
pass
文件 C:
import A
import B
class C(A,B,metaclass=ABCMeta):
def method1(self):
pass
def method2(self):
pass
问题源于导入错误。
文件 C 应该是:
from A import A
from B import B
class C(A,B):
def method1(self):
pass
def method2(self):
pass
感谢@Matthias 和@Giacomo Alzetta,他们指出 MCVE 对他们有用。
已编辑
我有 2 个 class 继承自 ABC
,第三个 class 继承自两者,每个都在不同的文件中。试图将ABCMeta
的metaclass提供给最后一个class,以解决metaclasses的冲突,但同样失败
"TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases"
在这种情况下,为什么 python 会忽略 metaclass 指令,如何解决?
文件A:
from abc import ABC, abstractmethod
class A(ABC):
@abstractmethod
def method1(self):
pass
文件 B:
from abc import ABC, abstractmethod
class B(ABC):
@abstractmethod
def method2(self):
pass
文件 C:
import A
import B
class C(A,B,metaclass=ABCMeta):
def method1(self):
pass
def method2(self):
pass
问题源于导入错误。 文件 C 应该是:
from A import A
from B import B
class C(A,B):
def method1(self):
pass
def method2(self):
pass
感谢@Matthias 和@Giacomo Alzetta,他们指出 MCVE 对他们有用。