Python 정적메소드(@staticmethod 와 @classmethod)

정적메소드

홍찬기
2 min readFeb 26, 2020
  • 정적메소드는 클래스에서 직접 접근할 수 있는 메소드이다.
  • 파이썬에서 클래스에서 직접 접근할 수 있는 메소드가 @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 + b
cal = 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인자를 활용하여 현재 클래스의 클래스 속성을 가져온다.

--

--

Responses (1)