티스토리 뷰

- 클래스 변수

- 인스턴스 변수


- 인스턴스 메소드

- 클래스 메소드

- 스태틱 메소드


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


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

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

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


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2023/12   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함