如何使用__subclasscheck__魔术方法?

时间:2016-01-06 00:17:40

标签: python inheritance python-2.x subclassing metaclass

我们怎样才能让一个关于谁已经分类的谎言?

在阅读doc之后我尝试了这个:

>>> class AllYourBase(type):
...     @classmethod
...     def __subclasscheck__(cls, other):
...         return True
...     
>>> class AllYour(object):
...     __metaclass__ = AllYourBase

现在,这个班级应该报告你所有的基地都属于他。

但它不起作用:

>>> issubclass(AllYour, int)
False

为什么不呢?

1 个答案:

答案 0 :(得分:2)

如果您希望AllYour声称是每个类的子类,那是不可能的。 __subclasscheck__在另一个方向工作。

如果您希望AllYour声明每个类都将其子类化,请删除@classmethod装饰器,并在issubclass调用中切换参数。您在元类上定义的特殊方法不需要特殊装饰。