본문 바로가기
파이썬/문법

Python | 클래스 변수와 클래스 메소드 (Class Variable, Class Method)

by 하우론 2018. 6. 27.

- 클래스 변수

- 인스턴스 변수


- 인스턴스 메소드

- 클래스 메소드

- 스태틱 메소드


위의 개념들은 쓸 때마다 혼동됩니다. 어디다 적어놓지 않으면 나중에 또 까먹을 게 뻔합니다.


그러니 클래스 메소드를 한 번 알아봅시다.

class A:
    var = 1

위와 같이 클래스를 정의했다고 해봅시다. 여기서 var은 클래스 변수입니다. 

인스턴스들의 클래스 변수들도 클래스 변수의 값과 같은 것은 굳이 안 봐도 알 수 있습니다.

>>> a = A()
>>> b = A()
>>> A.var
1
>>> a.var
1

여기서 클래스의 클래스 변수를 수정해봅시다.

>>> A.var = 2
>>> b.var
2
>>> a.var
2

클래스 변수를 수정하면 해당 클래스의 인스턴스들에 모두 적용됩니다. 하지만 인스턴스의 클래스 변수를 수정하면

>>> a.var = 3
>>> b.var
2
>>> A.var
2

해당 인스턴스의 클래스 변수만 수정됩니다.


클래스 변수를 이용해 클래스를 네임스페이스(namespace)로 사용할 수 있습니다.




클래스 메소드(Class Method) - 레퍼런스 : SchoolofWeb


일반적인 인스턴스 메소드는 첫 번째 인자로 인스턴스 자신이 자동적으로 들어가게 되며, 이 인자의 이름은 관례로 self라고 한다고 합니다. 그리고 클래스 메소드는 @classmethod 데코레이터로 생성 가능하며, 첫 번째 인자로 인스턴스의 클래스가 들어가게 됩니다. 이를 관례로 cls라고 합니다. 간단하게 클래스 메소드로 클래스 변수를 수정해봅시다.

>>> class A:
...   var = 1
...   @classmethod
...   def mod(cls, k):
...     cls.var = k
>>> a = A()
>>> b = A()
>>> b.mod(3)
>>> a.var
3
>>> b.var
3
>>> A.var
3

클래스 메소드에서 클래스의 클래스 변수를 수정해서, 다른 인스턴스와 클래스의 클래스 변수를 수정할 수 있습니다.