전에 사용하지 않은 Django 앱을 통합하는 동안 클래스에서 함수를 정의하는 데 두 가지 다른 방법이 사용되었습니다. 저자는 둘 다 매우 의도적으로 사용하는 것 같습니다. 첫 번째는 하나가 나 자신이 많이 사용됩니다언제 @classmethod를 사용해야하고 def 메소드 (자체)를 사용해야합니까?
class Dummy(object):
def some_function(self,*args,**kwargs):
do something here
self is the class instance
다른 하나는 내가 그것을 사용하는 경우에 이해하고, 무엇을하지 주로하기 때문에, 내가 사용하지 않는 하나입니다
class Dummy(object):
@classmethod
def some_function(cls,*args,**kwargs):
do something here
cls refers to what?
파이썬 문서에서 classmethod
장식이 문장을 설명한다 :
클래스 메소드는 인스턴스 메소드 인스턴스를 수신 다만 같이 암시 첫번째 인자로 클래스를 수신한다.
그래서 나는 cls
합니다 (class
인스턴스가 아니라) 자체 Dummy
을 의미 같아요. 나는 정확히이 존재 왜 항상이 할 수 있기 때문에, 이해가 안 :
type(self).do_something_with_the_class
단지 명확성을 위해이, 아니면 내가 가장 중요한 부분을 그리워했다 : 수 없었다 유령 매혹적인 것들 그것없이 끝났습니까?
좋은 답변 : 답변이 어떻게 나뉘어져서 왜 좋아하는지. 지금까지 @classmethod가 인스턴스를 필요로하지 않고 함수에 액세스 할 수있게되었습니다. 이게 내가 찾고 있었던 바로 그거야, 고마워. – marue
@marue 환영합니다! – Marcin
인스턴스에서 클래스 메서드를 호출하는 것은 잘못된 코딩 스타일이라고 말하고 싶습니다. 그렇게 할 이유가 없으며 혼란 만 일으킬 수 있습니다. 하지만 네가 작동합니다 (자바는 똑같은 것을 허용하지만, 인스턴스를 통해 정적 메소드를 호출 할 때 컴파일 경고를 발행합니다). – Voo