본문 바로가기
Python Object-oriented Programming

Class Methods

by 자동매매 2023. 4. 2.

 

Introduction to Python class methods

 

지금까지 클래스의 특정 인스턴스에 바인딩된 인스턴스 메서드 대해 알아보았습니다.

인스턴스 메서드는 동일한 클래스 내의 인스턴스 변수에 액세스할 수 있습니다. 인스턴스 메서드를 호출하려면 먼저 클래스의 인스턴스를 만들어야 합니다.

 

다음은 Person  클래스를 정의합니다.

 

class Person:
    def __init__(self, first_name, last_name, age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age

    def get_full_name(self):
        return f"{self.first_name} {self.last_name}"

    def introduce(self):
        return f"Hi. I'm {self.first_name} {self.last_name}. I'm {self.age} years old."

 

Person 클래스에는 __init__(),  get_full_name() introduce()  포함한 가지 인스턴스 메서드가 있습니다.

Person 클래스 create_anonymous()메서드를 추가하려는 경우를 가정해 보겠습니다.

 

이렇게하려면 다음 코드를 작성하게됩니다.

 

class Person:
    # ... other methods
    def create_anonymous(self):
        return Person('John', 'Doe', 25)

create_anonymous() 익명의 사람을 반환하는 인스턴스 메서드입니다.

 

 

그러나 create_anonymous() 메서드를 호출하려면  인스턴스를 만들어야 하는데, 경우에는 의미가 없습니다.

이것이 파이썬 클래스 메소드가 작동하는 이유입니다.

 

클래스 메서드는 특정 인스턴스에 바인딩되지 않습니다. 클래스에만 바인딩됩니다.

 

클래스 메서드를 정의하려면:

  1. @classmethod 데코레이터를  메서드 정의 위에 놓습니다. 지금은 @classmethod 데코레이터가 인스턴스 메서드를 클래스 메서드로 변경한다는 것을 이해하기만 하면 됩니다.
  2. self 매개 변수의  이름을 cls로 바꿉니다. CLS 는 클래스 를 의미합니다. 그러나 class는 키워드이므로 매개 변수로 사용할 수 없습니다.

 

다음은 Person 클래스의 버전을 보여 줍니다.

 

class Person:
    def __init__(self, first_name, last_name, age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age

    def get_full_name(self):
        return f"{self.first_name} {self.last_name}"

    def introduce(self):
        return f"Hi. I'm {self.first_name} {self.last_name}. I'm {self.age} years old."

    @classmethod
    def create_anonymous(cls):
        return Person('John', 'Doe', 25)

 

create_anonymous() 메서드는 인스턴스 속성에 액세스할 없습니다. 그러나 cls 변수를  통해 클래스 속성에 액세스  있습니다.

 

Calling Python class methods

 

 

ClassName.method_name()

 

다음 예제에서는 Person 클래스의 create_anonymous() 클래스 메서드를 호출하는 방법을 보여 줍니다.

 

anonymous = Person.create_anonymous()
print(anonymous.introduce())    # Hi. I'm John Doe. I'm 25 years old.

 

Class methods vs. instance methods

 

다음 표에서는 클래스 메서드와 인스턴스 메서드의 차이점을 보여 줍니다.

 

Features class methods Instance methods
Binding Class An instance of the class
Calling Class_name.method() object_name.method()
Accessing Class attributes Instance & class attributes

 

When to use Python class methods

 

클래스 메서드는 특정 인스턴스에 바인딩되지 않고 클래스에 바인딩된 모든 메서드에 사용할 있습니다. 실제로는 위의 예와 같이 클래스의 인스턴스를 만드는 메서드에 클래스 메서드를 사용하는 경우가 많습니다.

 

메서드가 클래스의 인스턴스를 만들고 반환하는 경우 메서드를 factory method라고 합니다. 예를 들어, create_anonymous() Person 클래스의 인스턴스를 반환하기 때문에 factory method입니다.

 

Summary

 

  • Python 클래스 메서드 특정 인스턴스가 아니라 클래스에 바인딩됩니다.
  • @classmethod 데코레이터를 사용하여 인스턴스 메서드를 클래스 메서드로 변경합니다. 또한 cls  클래스 메서드의 번째 매개 변수로 전달합니다.
  • factory method 클래스 메서드를 사용합니다.
 

'Python Object-oriented Programming' 카테고리의 다른 글

Instance Variables  (0) 2023.04.03
__init__ Method  (0) 2023.04.03
Methods  (0) 2023.04.02
Class Variables  (0) 2023.04.02
Class attributes  (0) 2023.04.02

댓글