Python 정적메소드(@staticmethod 와 @classmethod)
- 정적메소드는 클래스에서 직접 접근할 수 있는 메소드이다.
- 파이썬에서 클래스에서 직접 접근할 수 있는 메소드가 @staticmethod 와 @classmethod 두가지가 있다.
- 파이썬에서는 정적메소드임에도 불구하고 인스턴스에서도 접근이 가능하다.
@staticmethod
파이썬에서 staticmethod 는 아래와 같이 @staticmethod 라는 데코레이터를 사용하여 정의할 수 있다. 인스턴스메소드와 달리 self라는 인자를 가지고있지 않다.
class Calc:
@staticmethod
def add(a ,b):
return a + b
cal = Calc()
cal.add(1,2) # return 3
@classmethod
classmethod 는 @classmethod 라는 데코레이터를 사용하여 정의할 수 있다.
인스턴스 메소드와 달리 self 라는 인자 대신 cls라는 인자를 가진다.
class Calc:
@classmethod
def add(cls, a ,b):
return a + bcal = Calc()
cal.add(1,2) # return 3
@classmethod와 @staticmethod의 차이
두 정적 메소드의 차이는 상속에서 차이가 난다.
class Person:
default= "아빠"
def __init__(self):
self.data = self.default
@classmethod
def class_person(cls):
return cls()
@staticmethod
def static_person():
return Person()
class WhatPerson(Person):
default = "엄마"person1 = WhatPerson.class_person() # return 엄마
person2 = WhatPerson.static_person() # return 아빠
위와같이 staticmethod의 경우 부모 클래스의 클래스 속성 값을 가져오지만 classmethod의 경우 cls인자를 활용하여 현재 클래스의 클래스 속성을 가져온다.