프로그래밍 언어/파이썬
정적 메서드와 클래스 메서드 ( @staticmethod & @classmethod )
야식은진리다
2020. 9. 7. 14:51
파이썬에서 클래스에 직접 접근할 수 있는 메서드 즉 정적메서드는 두가지로 @staticmethod와 @classmethod라는 데코레이터를 사용하여 정의한다. 정적메서드이기 때문에 인스턴스 메서드처럼 self 인자를 갖지 않는다. 또 다른 언어들과 다르게 인스턴스에서도 정적메서드에 접근이 가능하다.
우선 @staticmethod는 다음과 같이 사용한다.
class MyClass:
@staticmethod
def add(a, b):
return a+b
myclass = MyClass()
print(myclass.add(1,2))
@classmethod는 다음과 같이 사용한다.
class MyClass:
@classmethod
def add(cls, a, b):
return a+b
myclass = MyClass()
print(myclass.add(1,2))
classmethod는 인스턴스 메서드가 self를 갖는것 처럼 cls라는 인자를 갖는다.
위 둘의 차이점은 상속에서 나타난다. staticmethod는 부모클래스의 속성을 가져오지만, classmethod에서는 cls 인자를 통해 cls의 속성을 가져올 수 있다.
class chocoPie:
type = "오리지널 초코파이"
def __init__(self):
self.data = self.type
@classmethod
def class_choco(cls):
return cls()
@staticmethod
def static_choco():
return chocoPie()
def printType(self):
print(self.data)
class bananaChocoPie(chocoPie):
type = "바나나맛 초코파이"
a = bananaChocoPie.class_choco()
b = bananaChocoPie.static_choco()
a.printType()
b.printType()