짧은하루
python @staticmethod 정적메서드 사용하기 본문
일반적으로, 클래스 안의 메서드를 사용할 때 인스턴스를 만들고 메서드를 호출합니다.
하지만, 인스턴스를 만들지 않고 바로 클래스에서 메서드를 호출하는 방법이 있습니다.
크게 두 가지 방법이 있는데 하나는 정적메서드, 또 다른 하나는 클래스 메서드입니다.
정적메서드
정적 메소드는 @staticmethod라는 데코레이터로 선언할 수 있고 self를 붙이지 않습니다.
class 클래스명:
@staticmethod
def 메서드(매개변수1, 매개변수2):
코드
예시
class Calc:
@staticmethod
def divide(a, b):
print(a/b)
Clac.divide(20, 10) # class에서 바로 호출
위와 같이 정적 메서드는 인스턴스와 상관없이 같은 값이 들어오면 같은 출력을 낼 때 사용합니다.
클래스 메서드
클래스 메서드는 @classmethod를 선언해서 사용하고 메서드의 첫번째 매개변수에 cls를 사용합니다.
class 클래스이름:
@classmethod
def 메서드(cls, 매개변수1, 매개변수2):
코드
예시
class Friend:
count = 0 # class 속성
def __init__(self):
Friend.count += 1 # 인스턴스가 생성될 때 클래스 속성 count에 1을 더함
# 클래스 속성은 클래스이름.속성명 으로 사용함
@classmethod
def print_count(cls):
print(cls.count) # cls로 클래스 속성에 접근함
yuri = Friend()
dh = Friend()
Friend.print_count() # 2
인스턴스가 만들어 질 때마다 클래스 속성 count에 1씩 더해지는 함수를 만들었습니다.
현재 Friend로 인스턴스를 두개 만들었으므로 print_count는 2가 나옵니다.
클래스 메서드의 첫번째 매개변수인 cls에는 클래스가 들어옵니다.
즉 Friend가 들어온 것과 같습니다.
클래스 메서드는 정적 메서드처럼 인스턴스 없이 메서드를 호출 할 수 있습니다.
정적 메서드와의 차이점은 메서드 안에서 클래스 속성에 접근해야할 때 사용한다는 것입니다.
특히, cls를 사용하면 메서드 안에서 인스턴스를 만들 수 있습니다.
@classmothod
def create(cls):
f = cls() # 메서드 안에서 인스턴스 생성
return f
cls는 클래스와 같으므로 cls()는 Friend()와 같습니다.
레퍼런스
- 파이썬 코딩도장
- https://dojang.io/mod/page/view.php?id=2379
- https://dojang.io/mod/page/view.php?id=2380
반응형
'Language > python' 카테고리의 다른 글
pip requirements.txt 만들고 사용하기 (0) | 2021.10.28 |
---|---|
python 제너레이터와 yield, next, send 총 정리 (0) | 2021.09.24 |
python dataframe loc, iloc 차이점 (pandas) (0) | 2021.09.23 |
python typing (Tuple, Union, Optional 의미) (0) | 2021.09.23 |
python 가정 설정문 (assert) (0) | 2021.09.23 |
Comments