반응형

Python class variable은 클래스 객체에 속한 변수이고, instance variable은 각 인스턴스 객체에 속한 변수다.

같은 이름의 변수가 클래스와 인스턴스에 모두 있을 수 있으므로 값을 읽거나 쓸 때 어느 객체의 속성을 다루는지 확인해야 한다.

 

핵심 정리

클래스 변수는 모든 인스턴스가 공유하는 기본값처럼 보일 수 있지만, 인스턴스에서 같은 이름으로 값을 할당하면 인스턴스 변수로 가려질 수 있다. 이 차이를 모르면 객체마다 독립적인 값이어야 하는 상태를 의도치 않게 공유할 수 있다.

  • 클래스 변수는 클래스 객체에 저장된다.
  • 인스턴스 변수는 각 인스턴스 객체에 저장된다.
  • 인스턴스에서 같은 이름으로 값을 쓰면 클래스 변수를 덮어쓰는 것이 아니라 인스턴스 속성이 생길 수 있다.
  • 공유 상태가 필요한 값과 개별 상태가 필요한 값을 구분해야 한다.
  • mixin이나 decorator class를 읽을 때도 클래스와 인스턴스의 속성 위치를 확인해야 한다.

클래스 변수 문제는 문법보다 값이 어느 객체에 저장되는지의 문제다. 클래스, 인스턴스, 속성 조회 순서를 나누어 보면 혼동이 줄어든다.

이어서 볼 글

 

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.

반응형

+ Recent posts