Method

파이썬에서 메서드는 크게 인스턴스 메서드(Instance Method), 정적 메서드(Static Method), 클래스 메서드(Class Method)가 있다.

Static Method와 Class Method 모두 정적 메서드이며 클래스의 인스턴스 없이 호출이 가능하며, 인스턴스에서는 호출 할 수 없다. 또한, 유틸리티 함수를 만드는데 유용하게 사용된다.

인스턴스 메서드 (Instance Method)

  • 인스턴스 메서드는 인스턴스 변수에 접근할 수 있도록 첫 번째 인자로 객체 자신을 의미하는 “self”를 갖는다.
  • 인스턴스 메소드는 인스턴스를 통해서 호출이 된다.
class Method:
    def instance_method(self):
        print("Instance method")


instance = Method()
instance.instance_method()

정적 메서드(Static Method)

  • 인스턴스 메서드와 클래스 메서드와 다르게 첫 번째 인자로 인스턴스나 클래스를 받지 않는다.
  • 클래스 안에서 정의되어 클래스 네임스페이스 안에 있다.
class Method:
    @staticmethod
    def static_method():
        print("Static Method")

        

Method.static_method()	# 결과: Static Method

클래스 메서드 (Class Method)

  • @classmethod 데코레이터를 정의하며 첫 번째 인자로 클래스 자신을 의미하는 cls를 갖는다.

  • 클래스 메서드는 클래스를 통해서 호출이 된다.

class Method:
    @classmethod
    def class_method(cls):
        print("Class Method")
        

Method.class_method()	# 결과: Class Method

staticmethod와 classmethod 차이

  • staticmethod와 classmethod는 정적 메서드이지만 상속에서 차이가 발생한다.

  • staticmethod는 부모 클래스의 클래스 속성 값을 가져옴
  • classmethod는 cls 인자를 활용해 현재 클래스의 클래스 속성을 가져옴
class Product:
    product = "Phone"

    def __init__(self):
        self.data = "Proudct: " + self.product

    @staticmethod
    def static_product():
        return Product()

    @classmethod
    def class_product(cls):
        return cls()

    def show(self):
        print(self.data)


class SmartPhone(Product):
    product = "SmartPhone"


a = SmartPhone()
a.show()

b = SmartPhone.static_product()
b.show()

c = SmartPhone.class_product()
c.show()
# 결과
Proudct: SmartPhone
Proudct: Phone
Proudct: SmartPhone