둘 다 인스턴스를 만들지 않고도 실행할 수 있는 클래스의 method를 정의한다
class PlusTen:
num=10
@staticmethod
def calc(x):
return x + 10
print(PlusTen.calc(10)) # 20
-------------------------------------------------------------------------------
class PlusTen:
num=10
@classmethod
def calc(cls, x):
return x + 10
print(PlusTen.calc(10)) # 20
Python
복사
둘 다 인스턴스 생성 없이 실행했고, 결과값도 같은데, classmethod에서 cls라는 인자가 추가되었다
저 num이라는 변수에 접근하려면 어떻게 구현해야할까?
1.
정적변수로 접근
class PlusTen:
num=10
@staticmethod
def calc(x):
return x + 10 + PlusTen.num
print(PlusTen.calc(10)) # 30
Python
복사
2.
class method에서 cls속성으로 접근
class PlusTen:
num=10
@classmethod
def calc(cls, x):
return x + 10 + cls.num
print(PlusTen.calc(10)) # 30
Python
복사
•
classmethod는 클래스의 어떠한 옵션을 바꾸고 싶을 때 사용할 수 있다
상속시
class PlusTen:
num=10
@classmethod
def calc(cls, x):
return x + 10 + cls.num
class PlusTen_2(PlusTen):
num=20
print(PlutTen_2.clac()) # ??
Python
복사
이렇게되면 어떤 값이 출력될까?
같은 이름의 변수가 PlusTen_2에 있더라도 cls.num은 상속받은 PlusTen의 num을 사용한다
cls를 사용할경우 상속받은 클래스부터 변수를 찾기 때문에
40이 출력될 것이다.