@staticmethod vs@classmethod
staticmethod
- 부모 클래스에서 정의된 staticmethod는 자식 클래스에서 call 가능
- 클래스 변수에는 접근이 가능
- 생성자 포함하여 인스턴스 메소드 변수에는 접근 불가
class hello_num:
num = 10
@staticmethod
def calc(x):
return x + 10 + hello_num.num
print(hello_num.calc(10))
classmehtod
- 부모 클래스에서 정의된 클래스 변수와 클래스 메소드는 자식 클래스에서도 선언 가능
- 클래스 변수에 접근이 가능한다.
- 생성자 함수 포함 인스턴스 메소드 변수에 접근이 불가
- classmehtod의 경우 cls 인자를 활용하여 클래스의 클래스 속성을 가져온다.
class hello_clsnum:
num = 10
@classmethod
def calc(cls, x):
return x + 10 + cls.num
print(hello_clsnum.calc(10))
차이점
- 차이점으로는 클래스를 상속할 때 나누어진다.
- staticmehtod
- 부모, 자식 클래스 어디에서 선언하든 클래스 변수를 모두 바꾼다.
- classmethod
- 부모 클래스 객체에서 선언해야지만 자식 클래스의 클래스 변수까지 모두 바꿀 수 있다.
class Person:
default= "아빠"
def __init__(self):
self.data = self.default
@classmethod
def class_person(cls):
return cls()
@staticmethod
def static_person():
return Person()
class WhatPerson(Person):
default = "엄마"
person1 = WhatPerson.class_person()
person2 = WhatPerson.static_person()