Python에서는 static(정적) 메소드를 데코레이터로 정의 할 수 있음
@staticmethod, @classmethod를 사용한다.
이 둘의 차이점은 classmethod의 경우는 첫번째 인수가 클래스를 지정하는데 반해 staticmethod는 인수를 받지 않음!!!
따라서 상속받는 경우 동작이 다름
class foo(object):
name = 'foo'
@staticmethod
def get_name_static():
print(foo.name)
@classmethod
def get_name_class(cls):
print(cls.name)
foo.get_name_static()
foo
foo.get_name_class()
foo
class bar(foo):
name = 'bar'
bar.get_name_static()
foo
bar.get_name_class()
bar
class foo(object):
@classmethod
def set_name(cls, name):
cls.name = name
class bar(foo):
pass
foo.set_name("foo")
print(foo.name)
print(bar.name)
bar.set_name("bar")
print(foo.name)
print(bar.name)
foo foo foo bar
class foo(object):
@staticmethod
def set_name(name):
foo.name = name
class bar(foo):
pass
foo.set_name("foo")
print(foo.name)
print(bar.name)
bar.set_name("bar")
print(foo.name)
print(bar.name)
foo foo bar bar