콘텐츠로 이동

정적메소드 (@staticmethod, @classmethod)

정적메소드는 클래스에서 직접 접근할 수 있는 메소드이다.

@staticmethod

인스턴스 메소드와 달리 self라는 인자를 가지고 있지 않다.

class Calc:
    @staticmethod
    def add(a, b):
        return a + b

cal = Calc()
cal.add(1,2)
# return 3

@classmethod

인스턴스 메소드와 달리 self 라는 인자 대신 cls 라는 인자를 가짐

class Calc:
    @classmethod
    def add(cls, a, b):
        return a + b

cal = Calc()
cal.add(1, 2)
# return 3

@staticmethod 와 @classmethod 의 차이

두 정적 메소드는 상속에서 차이가 난다.

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 인자를 활용하여 현재 클래스의 속성을 가져온다.