instance 에서 특정 attribute 에 접근했을 때, 어떠한 순서로 해당 attribute 에 접근하는 지 알아보려고 한다.
순한맛인 이유는 discriptor 가 없는 경우이기 때문이다.
discriptor 를 고려하면 훨씬 복잡해진다.
먼저 단순한 상황에 대해 이해하고 다음 기회에 discriptor 를 포함한 규칙을 알아보자.
어떤 한 클래스의 instance 를 obj 변수에 저장했다고 하자.
그러면 다음의 규칙이 성립한다.
obj.foo 라는 attribute 에 접근할 때의 규칙:
obj.__dict__ 에서 foo 라는 'key' 를 찾는다.
해당 key 가 없으면 type(obj).__dict__ 에서 foo key 를 찾는다. 여기에서 type(obj) 는 obj 의 클래스를 의미
거기에도 없으면 mro 의 순서대로 모든 __dict__ 를 찾아본다.
없으면, obj.__dict__ 에 foo 를 key 로 하는 entry 를 추가한다.
위 코드에서 Employee 의 attribute 에는 email 은 없었다.
emp_1 instance 에서 email 을 만들어주고 다시 emp_1 의 __dict__ 를 살펴보니 email 을 key 로 갖는 entry 가 생긴것을 확인할 수 있다.
위 4 번 규칙에 따라 만들어진 것이다.