self를 받지 않으므로 인스턴스 속성에 접근할 수 없음
인스턴스 속성, 인스턴스 메서드가 필요없을 때 사용.
메서드의 실행이 외부 상태에 영향을 끼치지 않는 순수 함수(pure function)를 만들 때 사용함.
입력값이 같으면 언제나 같은 출력값을 반환함.
class 클래스이름:
@staticmethod
def 메서드(매개변수1, 매개변수2):
코드
위의 형태로 사용
파이썬 자료형 - 인스턴스 메서드, 정적 메서드
>> a = {1, 2, 3, 4} >> a.update({5}) # 인스턴스 메서드 >> a {1, 2, 3, 4, 5} >> set.union({1, 2, 3, 4}, {5}) # 정적(클래스) 메서드 {1, 2, 3, 4, 5}
class 클래스이름:
@classmethod
def 메서드(cls, 매개변수1, 매개변수2):
코드
클래스 메서드는 @classmethod를 붙이고 첫번째 매개변수로 cls를 받는다.
class Person:
count = 0 # 클래스 속성
def __init__(self):
Person.count += 1 # 인스턴스가 만들어질 때
# 클래스 속성 count에 1을 더함
@classmethod
def print_count(cls):
print('{0}명 생성되었습니다.'.format(cls.count)) # cls로 클래스 속성에 접근
james = Person()
maria = Person()
Person.print_count() # 2명 생성되었습니다.
클래스 메서드는 정적 메서드처럼 인스턴스 없이 호출할 수 있다.
대신 메서드 안에서 클래스 속성, 클래스 메서드에 접근해야 할 때 사용한다.
cls를 사용하면 메서드 안에서 현재 클래스의 인스턴스를 만들 수 있다.