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