Python의 클래스 메서드는 클래스에 바인딩되지만 해당 클래스의 개체가 아닌 메서드입니다. 정적 메서드도 동일하지만 몇 가지 기본적인 차이점이 있습니다. 클래스 메서드의 경우 @classmethod 데코레이터를 지정해야 하고 정적 메서드의 경우 @staticmethod 데코레이터를 사용합니다.
클래스 메서드 구문.
class my_class: @classmethod deffunction_name(cls, arguments): #Function Body return value
정적 메서드의 구문입니다.
class my_class: @staticmethod deffunction_name(arguments): #Function Body return value
Classmethod와 StaticMehtod의 차이점은 무엇입니까?
클래스 메소드 | 정적 방법 |
---|---|
클래스 메소드는 cls(클래스)를 첫 번째 인수로 사용합니다. | 정적 메서드는 특정 매개변수를 사용하지 않습니다. |
클래스 메서드는 클래스 상태에 액세스하고 수정할 수 있습니다. | 정적 메서드는 클래스 상태에 액세스하거나 수정할 수 없습니다. |
클래스 메소드는 해당 클래스의 상태를 알기 위해 클래스를 매개변수로 사용합니다. | 정적 메서드는 클래스 상태를 알지 못합니다. 이 메소드는 일부 매개변수를 사용하여 일부 유틸리티 작업을 수행하는 데 사용됩니다. |
@classmethod 데코레이터가 여기에 사용됩니다. | @staticmethod 데코레이터가 여기에 사용됩니다. |
정적 메서드는 일부 유틸리티 작업을 수행하는 데 사용되며 클래스 메서드는 팩토리 메서드에 사용됩니다. 팩토리 메소드는 다양한 사용 사례에 대해 클래스 객체를 반환할 수 있습니다.
예시 코드
from datetime import date as dt class Employee: def __init__(self, name, age): self.name = name self.age = age @staticmethod defisAdult(age): if age > 18: return True else: return False @classmethod defemp_from_year(emp_class, name, year): return emp_class(name, dt.today().year - year) def __str__(self): return 'Employee Name: {} and Age: {}'.format(self.name, self.age) e1 = Employee('Dhiman', 25) print(e1) e2 = Employee.emp_from_year('Subhas', 1987) print(e2) print(Employee.isAdult(25)) print(Employee.isAdult(16))
출력
Employee Name: Dhiman and Age: 25 Employee Name: Subhas and Age: 31 True False