@classmethod는 Python에서 특정 인스턴스가 아닌 클래스 자체를 대상으로 하는 메서드에 유용하다.
1. 대체 생성자(Alternative Constructor):
@classmethod를 대체 생성자로 사용하여 일반적인 __init__ 메서드와 다른 초기화 로직을 정의할 수 있다.
인스턴스 생성 방식에 유연성을 제공하는데 도움이 된다.
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
@classmethod
def create_square(cls, side_length):
return cls(side_length, side_length)
square = Rectangle.create_square(5)
이 예시에서 create_square 클래스 메서드를 사용하여 폭과 높이가 동일한 Rectangle 인스턴스, 즉 정사각형을 생성할 수 있다.
@classmethod 데코레이터를 사용함으로써 클래스 자체에서 메서드를 호출하여 명시적으로 클래스를 인스턴스화하지 않고도 정사각형을 생성할 수 있다.
2. 팩토리 메서드(Factory Methods):
@classmethod는 특정 조건이나 parameter에 기반하여 클래스의 인스턴스를 생성하고 반환하는 Factory Method로 사용될 수도 있다. 이는 복잡한 인스턴스화 로직을 캡슐화하고자 할 때 특히 유용하다.
(팩토리 메서드 패턴을 통해 클래스의 인스턴스를 생성하는 다양한 방법을 한 클래스 내에서 정의할 수 있다.)
class Shape:
def __init__(self, sides):
self.sides = sides
@classmethod
def create_shape(cls, sides):
if sides == 3:
return cls("Triangle")
elif sides == 4:
return cls("Rectangle")
elif sides == 5:
return cls("Pentagon")
else:
return cls("Polygon")
triangle = Shape.create_shape(3)
이 예시에서 create_shape 클래스 메서드는 주어진 변의 수에 따라 Shape 클래스의 인스턴스를 생성하는 팩토리 메서드로 작동한다. 입력 매개변수에 기반하여 생성할 도형의 유형을 동적으로 결정할 수 있다.
3. Class-specific Utility Method:
때로는 클래스별 속성을 조작하거나 클래스 전체에 관련된 작업을 수행하는 메서드가 있을 수 있다. 이러한 경우 클래스 메서드를 사용하여 인스턴스 없이도 클래스 수준의 속성에 액세스 하고 작업할 수 있다.
class MathUtils:
PI = 3.14159
@classmethod
def calculate_circle_area(cls, radius):
return cls.PI * radius**2
area = MathUtils.calculate_circle_area(5)
이 예시에서 calculate_circle_area 클래스 메서드는 제공된 반지름을 기반으로 원의 면적을 계산한다. @classmethod 데코레이터를 사용함으로써 MathUtils 클래스의 인스턴스 없이도 클래스 수준의 상수인 PI에 액세스 할 수 있다.
📚참고
https://niceman.tistory.com/181
'Language > Python' 카테고리의 다른 글
[Python] 바다코끼리 연산자 Walrus Operator 알아보기 | LIM (0) | 2024.06.21 |
---|---|
[Python] Several Dict To One Dict Using ChainMap | LIM (0) | 2023.05.18 |
[Python] Pipenv 설치 및 가상환경 관리(Mac 기준) | LIM (0) | 2023.05.12 |
[Python] csv 모듈을 이용하여 파일 읽고, 쓰기 | LIM (0) | 2023.05.10 |
[Python] Ray 를 활용한 병렬처리 | LIM (0) | 2023.01.21 |
댓글