2013-09-03 2 views
1

왜이 인쇄가 거짓입니까?파이썬에서 __instancecheck__ 사용자 정의하기

#! /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) 

을 제공합니다 :

$ ./isinstancecheck.py 
<__main__.A object at 0x7f0574198b90> <class '__main__.A'> <__main__.A object at  0x7f0574198b90> <class '__main__.A'> 
False 

답변

5

the documentation에 따르면, __instancecheck__는 참 또는 거짓 반환해야합니다.

그러나 코드에서 A.__instancecheck__은 Nothing을 반환합니다. 아무 것도 암시 적으로 반환되지 않습니다. None은 False로 처리됩니다. 그래서 False이 인쇄됩니다.

+0

'인쇄 없음 '은 "없음"을 인쇄합니다. 나는 그것이 여기서 일어나고 있다고 생각하지 않는다. – abc

+2

@abc, 당신은'__instancecheck__'을 직접 호출하지 않습니다. (내부적으로 isinstance라고 부름). '__instancecheck__'의 끝에'return True'를 추가 한 다음'print isinstance (a, ...)'를 시도하십시오. – falsetru

+0

@abc'isinstance'는'__instancecheck__'의 결과를 bool에 강제합니다. – Random832

관련 문제