개발을 파헤치다/쉽게 풀어쓴 개념

[Python] Class Method와 Static Method 차이 쉽게 이해하기

개발자_H 2023. 5. 15. 12:02
반응형

 

class method와 static method는 상속에서 확실한 차이가 있습니다.
이 둘 모두 클래스에서 객체를 생성하지 않고 바로 접근하는 정적 메서드의 역할을 하는데요.
객체별로 달라지는 것이 아니기 때문에 흔히 유틸리티성 클래스를 만들 때 많이 사용합니다.

기본적인 사용은 아래와 같이 합니다.

class Test:
    @staticmethod
    def add(x,y) :
        return x + y

print Test.add(1,1) # 2

t = Test()
print t.add(1,1)  # 2

python에서는 다른 언어와는 다르게 정적 메서드임에도 불구하고 객체에서도 접근이 가능합니다.
이 부분을 유의해야합니다.

class Test:
    @classmethod
    def add(cls, x, y) :
        return x + y
        
print Test.add(1,1) # 2

classmethod는 첫 번째 인자로 객체 자신(self)이 반드시 들어갑니다.

이렇게 사용하면 둘이 큰 차이가 없어 보입니다. 하지만 상속에서 둘의 결과가 명확하게 달라지는데요.

class Language:
    default = "English"
    
    def __init__(self):
        self.show = '나의 언어는 ' + self.default
    @classmethod
    def class_my_language(cls):
        return cls()
        
    @staticmethod
    def static_my_language():
        return Language()
    
    def print_language(self):
        print(self.show)
        
class KoreanLanguage(Language):
    default = "한국어"
    

 

a = KoreanLanguage.static_my_language()
b = KoreanLanguage.class_my_language()

a.print_language() >> 나의 언어는 English
b.print_language() >> 나의 언어는 한국어

위의 결과에서도 알 수 있듯이 static method는 부모 클래스의 속성값을 가져옵니다.
하지만 class method에서는 객체 자신(cls or self)을 활용해서 객체 자신의 클래스 속성을 가져오는 것을 알 수 있습니다. 

반응형