Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 클래스 메서드 대 정적 메서드

<시간/>

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