다른 사람의 코드를 확인하면서 함수 위에 데코레이터로
@staticmethod
를 기입한 것을 발견했다.
저건 왜 쓰는거지..?
클래스의 인스턴스 없이 호출이 가능하며, 인스턴스에서는 호출 할 수 없다.
ex1. 인스턴스 없이 호출
>> Math.floor(3.14) --> better!!
----
>> mm = Math()
>> mm.floor(3.14)
ex.2 인스턴스에서는 호출 안됨 --> 이러한 이유로 모든 메서드를 정적으로 만들지 않음
class Foo(object):
def __init__(self):
self.bar = 'bar'
def too(self):
print self.bar
@staticmethod
def foo():
print self.bar
Foo().too() # works
Foo.foo() # doesn't work
유틸리티 함수를 만드는데 유용하게 사용된다
class Person:
default= "아빠"
def __init__(self):
self.data = self.default
@classmethod
def class_person(cls):
return cls()
@staticmethod
def static_person():
return Person()
class WhatPerson(Person):
default = "엄마"
person1 = WhatPerson.class_person() # return 엄마
person2 = WhatPerson.static_person() # return 아빠