除了
__metaclass__确切类型匹配的问题和快速路径之外,它的
__instancecheck__工作方向与您尝试做的事情相反。一个类会
__instancecheck__检查是否将其他对象视为该类的虚拟实例,而不是将该类的实例是否视为其他类的虚拟实例。
如果您希望对象在
isinstance检查中位于它们的类型上(您实际上不应该这样做),那么做到这一点的方法是躺在
__class__而不是实现上
__instancecheck__。
class BadIdea(object): @property def __class__(self): return tupleprint(isinstance(BadIdea(), tuple)) # prints True
顺便说一句,如果要获取对象的实际类型,请使用,
type而不要检查
__class__或
isinstance。



