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() 메서드를 호출하려면 인스턴스를 만들어야 하는데, 이 경우에는 의미가 없습니다.
이것이 파이썬 클래스 메소드가 작동하는 이유입니다.
클래스 메서드는 특정 인스턴스에 바인딩되지 않습니다. 클래스에만 바인딩됩니다.
클래스 메서드를 정의하려면:
- @classmethod 데코레이터를 메서드 정의 위에 놓습니다. 지금은 @classmethod 데코레이터가 인스턴스 메서드를 클래스 메서드로 변경한다는 것을 이해하기만 하면 됩니다.
- 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 |
댓글