getattr 메서드를 재정의하려고 시도 중이며 기본 개체 로 다음 코드 조각에 무한 루프가 있어야 합니다 .__ getattribute __ (self, attr) 속성이 'notpresent'가 없으므로 재정의 된 getattr 메서드를 호출합니다. 네임 스페이스와이 프로세스는 계속 반복됩니다. 이 행동이 여기에서 관찰되지 않는 이유를 알아내는 데 아무도 나를 도울 수 있습니까?
또한 메서드 내에서 getattribute를 명시 적으로 호출하려고 할 때 두 번째로 발생하는 동안 점 표기법을 사용하여 속성에 액세스하는 동안 getattribute에 대한 암시 적 호출이 수행 될 때 AttributeError가 발생하지 않는 이유를 알 수 없습니다.
class Test(object):
#Act as a fallback and is invoked when getattribute is unable to find attribute
def __getattr__(self,attr):
print "getattr is called"
return object.__getattribute__(self,attr) #AttributeError is raised
t=Test([1,2,3,4])
b = t.notpresent
object.__getattribute__
내에서 전화하고 있습니다 Test.__getattr__
.
여기에는 루프가 없습니다.
또한,에 따라 워드 프로세서 , __getattribute__
암시 적으로 호출하지 않습니다 __getattr__
.
다음 은 __getattribute__
호출 의 C 구현입니다 . 특히 slot_tp_getattr_hook
부분.
귀하의 경우 속성 조회 실패로 인해 사용자 지정 __getattr__
함수 를 호출하는 6072 줄이 실행 됩니다.
그 이후로가 AttributeError
삭제되었습니다. 하지만에 대한 전화가 object.__getattribute__
다시 설정되고 6074 또는 6075 번 회선에서 처리하지 않습니다.
object.__getattribute__
호출 구현 과 같이 함으로써 (재) 레이즈 AttributeError
(라인 1107).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다