@staticmethod
#staticmethod
class hello:
num = 10
@staticmethod
def calc(x):
return x + 10
print(hello.calc(10))
#결과
20
# 정적메소드를 써주지 않으면,
# hello().calc(10) 처럼 hello() 인스턴스를 생성해 줘야 한다.
# 보통 정적 메서드는 인스턴스 속성, 인스턴스 메서드가 필요 없을 떄 사용함.
@classmethod
#classmethod
class hello:
num = 10
@classmethod
def calc(cls, x):
return x + 10 + cls.num
print(hello.calc(10))
#결과
30
2. @classmethod와 @staticmethod 의 차이
https://wikidocs.net/16074
- classmethod와 static메소드의 차이는 상속에서 두드러지게 차이가 납니다.
- 예제를 만들어봅니다.
language.py
를 작성합니다.
class Language:
default_language = "English"
def __init__(self):
self.show = '나의 언어는' + self.default_language
@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_language = "한국어"
- REPL에서 결과값을 확인합니다.
- staticmethod에서는 부모클래스의 클래스속성 값을 가져오지만, classmethod에서는 cls인자를 활용하여 cls의 클래스속성을 가져오는 것을 알 수 있습니다.
>>> from language import *
>>> a = KoreanLanguage.static_my_language()
>>> b = KoreanLanguage.class_my_language()
>>> a.print_language()
나의 언어는 English
>>> b.print_language()
나의 언어는 한국어