파이썬 클래스 변수에 대해 궁금합니다
조회수 1538회
Class Dog :
name = str()
trick = []
A = Dog()
B = Dog()
A.name = 'Apple'
B.name = 'Banana'
A.trick.append('say_hi')
B.trick.append('stand')
이렇게 클래스를 만들면 A와 B의 name 은 각자 Apple, Banana로 저장이 되는데,
왜 trick 은 'say_hi' 와 'stand' 가 함께 저장되나요?
name 과 trick 사이에 무슨 차이가 있나요??
1 답변
-
>>> class Dog: ... name = str() ... trick = [] ... >>> A = Dog() >>> B = Dog() >>> A.name = 'Apple' >>> B.name = 'Banana' >>> A.trick.append('say_hi') >>> B.trick.append('stand') >>> A.__dict__['name'] 'Apple' >>> A.__class__.__dict__['name'] '' >>> A.__class__.__dict__['trick'] ['say_hi', 'stand'] >>> A.__dict__['trick'] Traceback (most recent call last): File "<interactive input>", line 1, in <module> KeyError: 'trick' >>> A.trick ['say_hi', 'stand']
파이썬은 변수들을 딕셔너리로 관리합니다.
인스턴스 변수는 dict 필드로 저장되어 있으며 클래스 변수의 경우 class가 추가되어 객체.class.dict필드로 접근이 가능합니다.
trick 은 자바나 c++ 의 static 키워드와 같이 동작함을 알 수 있고(인스턴스 변수없음) 프리미티브 타입의 경우 인스턴스를 생성한 경우 인스턴스 변수를 별도로 생성함을 알 수 있습니다.
댓글 입력