개발을 파헤치다/쉽게 풀어쓴 개념
[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)을 활용해서 객체 자신의 클래스 속성을 가져오는 것을 알 수 있습니다.
반응형