나의 지식 보관소
정적 메서드와 클래스 메서드 ( @staticmethod & @classmethod ) 본문
파이썬에서 클래스에 직접 접근할 수 있는 메서드 즉 정적메서드는 두가지로 @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()
'프로그래밍 언어 > 파이썬' 카테고리의 다른 글
파이썬 함수 map(), functools.reduce() (1) | 2021.06.06 |
---|---|
파이썬 내장 함수 Enumerate, Zip (1) | 2021.06.06 |
제너레이터 Generator / 제네레이터 표현식 Generator Expression (0) | 2020.09.06 |
리스트 컴프리헨션 (List Comprehension) (0) | 2020.09.05 |
이터레이터 Iterator (0) | 2020.09.04 |