Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- enum
- Test
- 생각
- Hashing
- AlignmentGuide
- vstack
- layout
- Linked List
- stack
- hstack
- Double Linked List
- swiftUI
- 자료구조
- Optional
- JavaScript
- SWIFT
- nodejs
- optional binding
- Universal Hashing
- 각도
- 시계방향
- Optional Chaining
- 좌표공간
- 레이아웃
Archives
- Today
- Total
klioop for iOS
instance 의 attribute 를 찾는 순서 본문
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 를 추가한다.
- mro 는 method resoultion order 로 python class hierarchy 에서 method 를 찾아보는 순서를 의미한다.
위 코드에서 Employee 의 attribute 에는 email 은 없었다.
emp_1 instance 에서 email 을 만들어주고 다시 emp_1 의 __dict__ 를 살펴보니 email 을 key 로 갖는 entry 가 생긴것을 확인할 수 있다.
위 4 번 규칙에 따라 만들어진 것이다.
'python' 카테고리의 다른 글
변수와 메모리 (0) | 2021.03.16 |
---|---|
decorator 이해하기 (0) | 2021.03.16 |
Variable-length Arguments with *args and **kwargs in Python (0) | 2021.03.16 |
globals(); python 에서 string 을 변수로 변환하는 방법 (0) | 2021.03.16 |