【发布时间】:2017-07-22 13:45:43
【问题描述】:
当类派生自具有__subclashook__ 实现的类时,无法从issubclass 返回False。我修改了以下代码:
python subclasscheck & subclasshook
我只在两个类定义中添加了 '(Sized)':
from abc import ABCMeta
class Sized(metaclass=ABCMeta):
@classmethod
def __subclasshook__(cls, C):
if cls is Sized:
if any("__len__" in B.__dict__ for B in C.__mro__):
return True
return NotImplemented
class A(Sized):
pass
class B(Sized):
def __len__(self):
return 0
print(issubclass(A, Sized)) # True - should be False
print(issubclass(B, Sized)) # True
在这种情况下有没有办法返回False?还是我做错了什么?
【问题讨论】:
-
当然我发现代码片段(在 abc 中)以:
ok = cls.__subclasshook__(subclass) -
如果我遗漏了一些东西,请原谅,但你能不能用
return False替换return NotImplemented吗?您在 PEP8 中有什么要坚持的吗? -
@leaf:谢谢,太明显了。但是为什么所有的例子都只返回
True或NotImplemented。 -
我相信这是因为 [Python]() 标准在实现“魔术方法”时所要求的。
标签: python python-3.x abc