Search

@staticmethod @classmethod

둘 다 인스턴스를 만들지 않고도 실행할 수 있는 클래스의 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이 출력될 것이다.