Python class variable은 클래스 객체에 속한 변수이고, instance variable은 각 인스턴스 객체에 속한 변수다.
같은 이름의 변수가 클래스와 인스턴스에 모두 있을 수 있으므로 값을 읽거나 쓸 때 어느 객체의 속성을 다루는지 확인해야 한다.
핵심 정리
클래스 변수는 모든 인스턴스가 공유하는 기본값처럼 보일 수 있지만, 인스턴스에서 같은 이름으로 값을 할당하면 인스턴스 변수로 가려질 수 있다. 이 차이를 모르면 객체마다 독립적인 값이어야 하는 상태를 의도치 않게 공유할 수 있다.
- 클래스 변수는 클래스 객체에 저장된다.
- 인스턴스 변수는 각 인스턴스 객체에 저장된다.
- 인스턴스에서 같은 이름으로 값을 쓰면 클래스 변수를 덮어쓰는 것이 아니라 인스턴스 속성이 생길 수 있다.
- 공유 상태가 필요한 값과 개별 상태가 필요한 값을 구분해야 한다.
- mixin이나 decorator class를 읽을 때도 클래스와 인스턴스의 속성 위치를 확인해야 한다.
클래스 변수 문제는 문법보다 값이 어느 객체에 저장되는지의 문제다. 클래스, 인스턴스, 속성 조회 순서를 나누어 보면 혼동이 줄어든다.
이어서 볼 글
- Python decorator class와 type 개념 정리 - class 객체와 type 개념을 함께 확인할 수 있다.
- Python mixin 패턴 정리 - mixin에서 클래스 속성과 인스턴스 속성을 구분하는 배경이 된다.
- Python metaclass와 decorator 동작 원리 정리 - 클래스 객체의 생성과 동작을 더 깊게 다루는 글이다.
- Python 디스크립터 이해하기: __get__, __set__, 속성 접근 제어 - 클래스 속성과 인스턴스 조회 관계가 descriptor 프로토콜에서 어떻게 제어되는지 이어서 확인할 수 있다.
class variable
이게 생각보다 오묘하다
위의 예제를 보면 일반적인 class level의 글로벌 변수 즉 static variable로 보인다.
클래스를 통한 assign은 모든 instance로 전파가 된다.
그런데 instance를 통해 assign을 하는순간 얘기가 달라진다.
위와 같이 instance 를 통한 assign은 전파가 안된다;;
http://stackoverflow.com/questions/68645/static-class-variables-in-python
This is different from C++ and Java, but not so different from C#, where a static member can't be accessed using a reference to an instance.
'Programming' 카테고리의 다른 글
| PyTorch BCELoss 사용법: criterion, output, label로 loss 계산 (0) | 2026.05.22 |
|---|---|
| 조건부확률 개념: 표본공간, 독립사건, 베이즈 정리 (0) | 2026.05.22 |
| 챗봇 특강 메모: RNN, 룰베이스, MDP 대화 알고리즘 (0) | 2026.05.20 |
| Vimrc 설정 정리: 검색, 들여쓰기, 탭, 상태바 (0) | 2026.05.20 |
| Python 터미널 컬러링: ANSI escape sequence와 decorator 패턴 (0) | 2026.05.18 |
