파이썬의 객체 속성 조회 (여기서는 https://blog.ionelmc.ro/2015/02/09/understanding-python-metaclasses/#object-attribute-lookup)에서 약간 읽었습니다. 내 질문은 두 사람이 동일한 dibe 안되어있다파이썬 3 __getattribute__ 대 도트 액세스 동작
class A:
def __getattr__(self, attr):
return (1,2,3)
a = A()
a.foobar #returns (1,2,3) as expected
a.__getattribute__('foobar') # raises AttributeError
:
내가 (python3를) 그것을 밖으로 시도, 그래서 꽤 똑바로 앞으로 것 같은데?
왜 두 번째 속성 오류가 발생합니까?
분명히 대답은 a.foobar
의 논리가 a.__getattribute("foobar")
의 논리와 다릅니다. data model에 따르면 a.__getattribute("foobar")
를 호출하고이 AttributeError를 제기하는 경우, 그것은
a.-__getattr__('foobar')
가 그래서 기사가 자신의 그림에서 실수를 것 같다 호출 a.foobar
. 이 올바른지?
또 다른 질문 : a.foobar에 대한 실제 논리는 어디에 있습니까? 나는 그것이 __getattribute__
에있다라고 생각했다. 그러나 명백하게 전체로.
편집 : 하지
Difference between __getattr__ vs __getattribute__의 중복. object.foo
과 object.__getattribute__("foo")
의 차이점은 무엇입니까? 이것은 __getattr__
대 __getatribute__
와는 조금 다른데 ...
먼저 공식 문서를 참조하십시오 : https://docs.python.org/3.5/reference/datamodel.html#object.__getattribute__ – thodnev
'.__ getattribute __ ('foobar')'를'a .__ getattr __ ('foobar ')'그리고 무슨 일이 일어나는 지보십시오. – DeepSpace
그 일에 관심이 없다 ...'__getattribute__'는 결국'__getattr__'을 호출하기로되어 있습니다. 'a.foobar'는'__getattribute__'를 호출해야합니다 – deller