- 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
'파이썬(python)' 카테고리의 다른 글
Python - 클래스와 객체, 인스턴스를 이해해보자 ( 예시를 통한 설명 ) (0) | 2022.02.23 |
---|---|
Python - class 에서 self 와 cls 의 차이 (0) | 2022.02.23 |
os.path.join & os.path.abspath (0) | 2022.02.23 |
python - configparser 기본 사용법 (0) | 2022.02.23 |
[파이썬] rjust, ljust 정렬 (0) | 2021.10.19 |