我在Windows上使用python 2.7.3.我试图将__instancecheck__魔术方法覆盖为类方法.但我不能让它发挥作用.
class Enumeration(int):
@classmethod
def __instancecheck__(cls, inst):
if type(inst) == cls:
return True
if isinstance(inst, int) and inst in range(0,10):
return True
return False
print isinstance(1, Enumeration) # prints False
print isinstance(1, Enumeration()) # prints True
Run Code Online (Sandbox Code Playgroud)
我假设第一个print语句将为True.但似乎__instancecheck__没有调用神奇的方法.我不知道为什么第二个print语句可以工作,因为isinstance应该将class/type作为第二个参数.
有谁知道问题是什么?谢谢.
为什么这个打印是假的?
#! /usr/bin/env python
class A(object):
def __instancecheck__(self,arg):
print self, type(self), arg , type(arg)
if __name__ == '__main__':
a = A()
print isinstance(a,a)
Run Code Online (Sandbox Code Playgroud)
得到:
$ ./isinstancecheck.py
<__main__.A object at 0x7f0574198b90> <class '__main__.A'> <__main__.A object at 0x7f0574198b90> <class '__main__.A'>
False
Run Code Online (Sandbox Code Playgroud) python ×2