擅长:python、mysql、java
<p>我认为实现这一点的好方法是:</p>
<pre><code>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
else:
return False
return NotImplemented
class A(Sized):
pass
class B(Sized):
def __len__(self):
return 0
print(issubclass(A, Sized)) # False
print(issubclass(B, Sized)) # True
</code></pre>
<p>我认为当我们假设<code>abc</code>是与其他语言中的编译(或反射)类似的机制时,我们应该返回False。如果有人怀疑这个类是正确的子类,那么代码就不应该运行,甚至不应该编译(python中没有)。在</p>