17.Static Method & Class Method
by SANGGI JEON
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
Subscribe via RSS