본문 바로가기
실버를 위한 코딩/파이썬

[내장 함수] 파이썬 내장 함수, classmethod()

by forSilver 2024. 10. 11.
반응형

파이썬 내장 함수, classmethod()

파이썬의 내장 함수 classmethod()는 메서드를 클래스 메서드로 변환하는 데 사용됩니다. 클래스 메서드는 클래스 자체를 첫 번째 인자로 받으며, 클래스의 상태나 클래스 변수를 조작할 수 있습니다. 이를 통해 인스턴스가 아니라 클래스 자체와 관련된 작업을 수행할 수 있습니다.

classmethod() 함수의 문법

classmethod(function)
  • function: 클래스 메서드로 변환할 함수입니다.

클래스 메서드란?

클래스 메서드는 클래스 자체를 인자로 받아 클래스 레벨에서 동작하는 메서드입니다. 클래스 메서드는 인스턴스가 없어도 호출할 수 있으며, 첫 번째 인자로 클래스 객체를 받습니다. 이를 통해 클래스 변수를 조작하거나 클래스 전체에 영향을 미치는 작업을 할 수 있습니다.

클래스 메서드 정의 방법

클래스 메서드는 두 가지 방법으로 정의할 수 있습니다:

  1. @classmethod 데코레이터를 사용
  2. 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

클래스 메서드의 특징

  1. 첫 번째 인자로 클래스 객체(cls)를 받습니다: 클래스 메서드는 메서드 호출 시 인스턴스가 아닌 클래스를 첫 번째 인자로 받습니다. 이를 통해 클래스 변수를 조작하거나 클래스 전체에 영향을 미치는 작업을 수행할 수 있습니다.
  2. 인스턴스가 없어도 호출 가능: 클래스 메서드는 클래스 레벨에서 동작하므로, 인스턴스를 만들지 않고도 호출할 수 있습니다.
  3. 클래스 변수에 접근 가능: 클래스 메서드를 사용하면 클래스 변수를 읽거나 수정할 수 있습니다.

클래스 메서드와 인스턴스 메서드의 차이

  • 인스턴스 메서드: 첫 번째 인자로 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

활용 예시

클래스 메서드는 다음과 같은 경우에 유용합니다:

  1. 팩토리 메서드: 클래스 메서드를 사용하여 특정 조건에 따라 클래스의 인스턴스를 반환하는 경우.
  2. 클래스 변수를 제어할 때: 클래스 변수를 수정하거나 조회하는 동작을 정의할 때.

결론

classmethod()를 사용하여 메서드를 클래스 메서드로 변환하면, 클래스 레벨에서 동작하는 메서드를 정의할 수 있습니다. 이를 통해 클래스 변수나 클래스 상태를 관리할 수 있고, 인스턴스 없이도 호출 가능한 메서드를 정의할 수 있어 다양한 상황에서 유용하게 사용할 수 있습니다.