본문 바로가기

파이썬(python)

python - @classmethod

- classmethod 일 때

class Test:
    a = 0

    @classmethod
    def test(cls):
        cls.a = 1

t1 = Test()
print(t1.a)
t2 = Test()
print(t2.a)

t1.test()
print(t1.a)
print(t2.a)

 

- 마지막 print(t2.a) 의 값도 1 로 출력이 된다. 여기서 유추해볼 수 있듯이, t1, t2는 같은 클래스를 공유하고 있으며,

객체이며 상속관계에 속해있다. 따라서 t1.test() 로 classmethod 로 instance 화된 test 매서드를 실행할 때에

Test 클래스에서 가리키는 a 의 메모리값이 1로 고정되도록 변경되기 때문에 t2.a 의 값도 1 을 출력하게 되는 것이다.

정리하자면 python 에서 classmethod 는 호출 시 그 클래스내에서의 python 문법 상 공식인 cls 로 받게되는 

매개변수 or 파라미터를 메모리에서 고정값으로 바꿔버리는 역할을 하는 듯 하다.

 

- 반면에 보통의 instance 매서드를 사용했을 때에는

class Test:
    a = 0

    def test(self):
        self.a = 1

t1 = Test()
print(t1.a)
t2 = Test()
print(t2.a)

t1.test()
print(t1.a)
print(t2.a)

 

- print(t2.a) 의 값은 0으로서 classmethod 와 달리 변하지 않는다. 

t2.test()를 실행해줘야 바꿀 수 있다.

- 부족하고 정리되지 못한 내용이 많네요.. 머릿속으로 개념은 있는데 단어적으로나 표현이 안되어

담지 못한 부분들도 있습니다. 보시면서 부족하더라도 어느정도 뜻이나 개념이 전달되었으면 좋겠습니다.

 

- 참고로 이 분이 쓰신 블로그글이 제일 잘 설명되어 있다고 생각됩니다.

https://dodonam.tistory.com/122

 

Instance method, Class method, Static method

python class를 사용할 때, 가장 헷갈리는 것이 Instance method, Class method, Static method 의 사용 의도(?) 차이이다. 이번에는 위 3가지 method의 차이점을 알아보고자 한다. Instance method class에서 ins..

dodonam.tistory.com