Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

나의 지식 보관소

정적 메서드와 클래스 메서드 ( @staticmethod & @classmethod ) 본문

프로그래밍 언어/파이썬

정적 메서드와 클래스 메서드 ( @staticmethod & @classmethod )

야식은진리다 2020. 9. 7. 14:51

파이썬에서 클래스에 직접 접근할 수 있는 메서드 즉 정적메서드는 두가지로 @staticmethod와 @classmethod라는 데코레이터를 사용하여 정의한다. 정적메서드이기 때문에 인스턴스 메서드처럼 self 인자를 갖지 않는다. 또 다른 언어들과 다르게 인스턴스에서도 정적메서드에 접근이 가능하다.

 

우선 @staticmethod는 다음과 같이 사용한다.

 

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

myclass = MyClass()
print(myclass.add(1,2))

 

@classmethod는 다음과 같이 사용한다.

 

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

myclass = MyClass()
print(myclass.add(1,2))

 

classmethod는 인스턴스 메서드가 self를 갖는것 처럼 cls라는 인자를 갖는다.

 

위 둘의 차이점은 상속에서 나타난다. staticmethod는 부모클래스의 속성을 가져오지만, classmethod에서는 cls 인자를 통해 cls의 속성을 가져올 수 있다.

class chocoPie:
    type = "오리지널 초코파이"

    def __init__(self):
        self.data = self.type

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

    @staticmethod
    def static_choco():
        return chocoPie()
    
    def printType(self):
        print(self.data)

class bananaChocoPie(chocoPie):
    type = "바나나맛 초코파이"

a = bananaChocoPie.class_choco()
b = bananaChocoPie.static_choco()

a.printType()
b.printType()