instance 의 attribute 를 찾는 순서, 순한맛ver; python

운명애·2021년 1월 10일
1

Python

목록 보기
5/7

instance 에서 특정 attribute 에 접근했을 때, 어떠한 순서로 해당 attribute 에 접근하는 지 알아보려고 한다.

순한맛인 이유는 discriptor 가 없는 경우이기 때문이다.
discriptor 를 고려하면 훨씬 복잡해진다.

먼저 단순한 상황에 대해 이해하고 다음 기회에 discriptor 를 포함한 규칙을 알아보자.

어떤 한 클래스의 instance 를 obj 변수에 저장했다고 하자.

그러면 다음의 규칙이 성립한다.
obj.foo 라는 attribute 에 접근할 때의 규칙:

  1. obj.__dict__ 에서 foo 라는 'key' 를 찾는다.

  2. 해당 key 가 없으면 type(obj).__dict__ 에서 foo key 를 찾는다. 여기에서 type(obj) 는 obj 의 클래스를 의미

  3. 거기에도 없으면 mro 의 순서대로 모든 __dict__ 를 찾아본다.

  4. 없으면, obj.__dict__ 에 foo 를 key 로 하는 entry 를 추가한다.

  • mro 는 method resoultion order 로 python class hierarchy 에서 method 를 찾아보는 순서를 의미한다.

위 코드에서 Employee 의 attribute 에는 email 은 없었다.

emp_1 instance 에서 email 을 만들어주고 다시 emp_1 의 __dict__ 를 살펴보니 email 을 key 로 갖는 entry 가 생긴것을 확인할 수 있다.

위 4 번 규칙에 따라 만들어진 것이다.

profile
개발자 하고 싶어요..

0개의 댓글