파이썬에서 classmethod
와 staticmethod
는 클래스를 사용하여 메소드를 정의할 때 사용되는 두 가지 유형의 메소드입니다. 이 두 메소드는 사용 목적과 호출 방식에서 차이가 있습니다.
classmethod
classmethod
는 클래스를 위한 메소드입니다. 첫 번째 매개변수로 클래스 자체(cls
)를 자동으로 받습니다.- 이 메소드는 클래스 변수와 같은 클래스 레벨의 데이터에 접근하고 수정하는 데 사용됩니다.
classmethod
는 인스턴스를 생성하지 않고도 클래스 이름을 통해 직접 호출할 수 있습니다.- 클래스 메소드는 상속 시, 상속받은 클래스의 객체와 함께 해당 클래스를 가리키는
cls
매개변수를 사용하기 때문에 서브클래스에서도 적절하게 동작합니다.
staticmethod
staticmethod
는 클래스나 인스턴스와 독립적이지만, 로직상 클래스 내에 포함되는 메소드입니다.- 이 메소드는 특정 인스턴스나 클래스 변수에 접근하지 않습니다. 따라서
self
나cls
를 매개변수로 받지 않습니다. staticmethod
역시 인스턴스를 생성하지 않고 클래스 이름을 통해 직접 호출할 수 있습니다.- 주로 클래스 내에 논리적으로 포함되지만, 클래스나 인스턴스 데이터에 접근할 필요가 없는 경우 사용됩니다.
차이점
- 매개변수:
classmethod
는 첫 번째 매개변수로 클래스(cls
)를 받습니다. 반면,staticmethod
는self
나cls
같은 특별한 첫 번째 매개변수를 받지 않습니다. - 용도:
classmethod
는 클래스 변수 같은 클래스 레벨의 데이터에 접근하거나 수정할 때 사용됩니다.staticmethod
는 클래스나 인스턴스와 독립적인 메소드가 필요할 때 사용되며, 클래스 내에서 정의된 단순 함수와 유사합니다. - 상속과의 관계:
classmethod
는 상속 시 서브클래스에 대해cls
매개변수가 서브클래스를 가리키므로, 상속 체인에서 유연하게 사용될 수 있습니다.staticmethod
는 상속과 관계없이 클래스 내의 정적 함수로 동작합니다.
예시
class ExampleClass:
class_var = "I am a class variable"
@classmethod
def class_method(cls):
print(cls.class_var)
@staticmethod
def static_method():
print("I am static and independent of class or instance")
ExampleClass.class_method() # 클래스 변수에 접근
ExampleClass.static_method() # 클래스나 인스턴스와 독립적인 동작 수행
이 예시에서 class_method
는 클래스 변수에 접근할 수 있지만, static_method
는 그렇지 않습니다. staticmethod
는 클래스 내에서 정의되어 있지만, 클래스의 어떤 속성에도 접근하지 않는 독립적인 메소드입니다.
'프로그래밍 언어 > 파이썬' 카테고리의 다른 글
Celery와 FastAPI - 2 (1) | 2024.03.22 |
---|---|
Celery와 FastAPI - 1 (0) | 2024.03.22 |
파이썬에서 접근제어 지시자 (0) | 2024.03.20 |
Call by Assignment란? (0) | 2024.03.20 |
r string, u string이란 (0) | 2024.03.20 |