속성은 가까운 곳부터 찾는다
obj.x는 먼저 인스턴스를 보고, 없으면 클래스와 MRO를 따라가. 인스턴스에 x를 대입하면 같은 이름의 클래스 속성을 가릴 수 있지만 클래스의 값 자체가 바뀌는 건 아니야.
가변 클래스 속성은 모두가 공유해
클래스 본문에서 만든 리스트나 딕셔너리는 인스턴스마다 새로 생기지 않아. 한 객체가 append하면 다른 객체에서도 보여. 인스턴스별 모음은 __init__에서 self.items = []로 만들어.
의도적인 공유는 괜찮아
상수, 클래스 전체의 설정, 명시적인 레지스트리는 클래스 속성이 맞을 수 있어. obj.__dict__와 Class.__dict__를 보면 어디가 값을 소유하는지 확인할 수 있어.