반응형
파이썬 내장 함수, classmethod()
파이썬의 내장 함수 classmethod()
는 메서드를 클래스 메서드로 변환하는 데 사용됩니다. 클래스 메서드는 클래스 자체를 첫 번째 인자로 받으며, 클래스의 상태나 클래스 변수를 조작할 수 있습니다. 이를 통해 인스턴스가 아니라 클래스 자체와 관련된 작업을 수행할 수 있습니다.
classmethod()
함수의 문법
classmethod(function)
function
: 클래스 메서드로 변환할 함수입니다.
클래스 메서드란?
클래스 메서드는 클래스 자체를 인자로 받아 클래스 레벨에서 동작하는 메서드입니다. 클래스 메서드는 인스턴스가 없어도 호출할 수 있으며, 첫 번째 인자로 클래스 객체를 받습니다. 이를 통해 클래스 변수를 조작하거나 클래스 전체에 영향을 미치는 작업을 할 수 있습니다.
클래스 메서드 정의 방법
클래스 메서드는 두 가지 방법으로 정의할 수 있습니다:
@classmethod
데코레이터를 사용classmethod()
함수를 사용
예시 1: @classmethod
데코레이터를 사용한 클래스 메서드 정의
class MyClass:
class_variable = 0
@classmethod
def increase_class_variable(cls):
cls.class_variable += 1
# 클래스 메서드는 인스턴스 없이도 호출 가능
MyClass.increase_class_variable()
print(MyClass.class_variable) # 출력: 1
예시 2: classmethod()
함수 사용
class MyClass:
class_variable = 0
def increase_class_variable(cls):
cls.class_variable += 1
# classmethod()로 클래스 메서드로 변환
increase_class_variable = classmethod(increase_class_variable)
# 클래스 메서드 호출
MyClass.increase_class_variable()
print(MyClass.class_variable) # 출력: 1
클래스 메서드의 특징
- 첫 번째 인자로 클래스 객체(
cls
)를 받습니다: 클래스 메서드는 메서드 호출 시 인스턴스가 아닌 클래스를 첫 번째 인자로 받습니다. 이를 통해 클래스 변수를 조작하거나 클래스 전체에 영향을 미치는 작업을 수행할 수 있습니다. - 인스턴스가 없어도 호출 가능: 클래스 메서드는 클래스 레벨에서 동작하므로, 인스턴스를 만들지 않고도 호출할 수 있습니다.
- 클래스 변수에 접근 가능: 클래스 메서드를 사용하면 클래스 변수를 읽거나 수정할 수 있습니다.
클래스 메서드와 인스턴스 메서드의 차이
- 인스턴스 메서드: 첫 번째 인자로
self
를 받으며, 이는 인스턴스 객체를 가리킵니다. 인스턴스 레벨에서 동작하며, 인스턴스 변수에 접근하고 조작할 수 있습니다. - 클래스 메서드: 첫 번째 인자로
cls
를 받으며, 이는 클래스 객체를 가리킵니다. 클래스 레벨에서 동작하며, 클래스 변수를 조작하거나 클래스와 관련된 동작을 수행합니다.
예시 3: 클래스 메서드와 인스턴스 메서드 비교
class MyClass:
class_variable = 0
def __init__(self, value):
self.instance_variable = value
# 인스턴스 메서드
def instance_method(self):
print(f"인스턴스 변수: {self.instance_variable}")
# 클래스 메서드
@classmethod
def class_method(cls):
print(f"클래스 변수: {cls.class_variable}")
# 인스턴스 메서드는 인스턴스를 통해 호출
obj = MyClass(10)
obj.instance_method() # 출력: 인스턴스 변수: 10
# 클래스 메서드는 인스턴스 없이도 호출 가능
MyClass.class_method() # 출력: 클래스 변수: 0
활용 예시
클래스 메서드는 다음과 같은 경우에 유용합니다:
- 팩토리 메서드: 클래스 메서드를 사용하여 특정 조건에 따라 클래스의 인스턴스를 반환하는 경우.
- 클래스 변수를 제어할 때: 클래스 변수를 수정하거나 조회하는 동작을 정의할 때.
결론
classmethod()
를 사용하여 메서드를 클래스 메서드로 변환하면, 클래스 레벨에서 동작하는 메서드를 정의할 수 있습니다. 이를 통해 클래스 변수나 클래스 상태를 관리할 수 있고, 인스턴스 없이도 호출 가능한 메서드를 정의할 수 있어 다양한 상황에서 유용하게 사용할 수 있습니다.
'실버를 위한 코딩 > 파이썬' 카테고리의 다른 글
Pandas와 NumPy의 비교 (4) | 2024.10.17 |
---|---|
[파이썬 내장 함수] 복소수 생성, complex() (3) | 2024.10.14 |
[내장 함수] 파이썬 내장 함수 'chr(i)' (2) | 2024.10.10 |
[내장 함수] 파이썬 내장 함수 'setattr()' (1) | 2024.10.09 |
[내장 함수] 파이썬 내장 함수, delatter() (1) | 2024.10.08 |