이 글은 Python을 기반으로 하는 staticmethod와 classmethod의 차이점을 주로 소개합니다. 이제는 모든 사람과 공유합니다. 도움이 필요한 친구들은 참고할 수 있습니다
class A(object):
def foo(self,x):
print "executing foo(%s,%s)"%(self,x)
@classmethod
def class_foo(cls,x):
print "executing class_foo(%s,%s)"%(cls,x)
@staticmethod
def static_foo(x):
print "executing static_foo(%s)"%x
a=A()
클래스에는 다음과 같이 사용되는 세 가지 함수가 있습니다.
a.foo(1) # executing foo(<__main__.A object at 0xb7dbef0c>,1) ----------------------------------------------------------------- a.class_foo(1) # executing class_foo(<class '__main__.A'>,1) A.class_foo(1) # executing class_foo(<class '__main__.A'>,1) ----------------------------------------------------------------- a.static_foo(1) # executing static_foo(1) A.static_foo('hi') # executing static_foo(hi)
Difference
• foo() 호출자는 클래스 A의 인스턴스여야 하며 class_foo() 및 static_foo()는 클래스일 수도 있고 인스턴스일 수도 있습니다• foo() 매개변수는 self이고 다른 매개변수는 static_foo() 대신 클래스(cls)를 사용합니다. self 및 클래스(cls) 없이 매개변수가 있습니다. )
• a.foo(1)의 foo()는 a에 바인딩되고, class_foo()는 클래스에 바인딩되며, static_foo()는 둘 중 하나에 바인딩되지 않습니다. . 다음과 같이 print 를 사용하여 볼 수 있습니다:
" print(a.foo) # <bound method A.foo of <main.A object at 0xb7d52f0c>> print(a.class_foo) # <bound method type.class_foo of <class 'main.A'>> print A.class_foo <bound method classobj.class_foo of > print(a.static_foo) # print(A.static_foo) # "
Function
• 클래스 메소드는 일부 팩토리 클래스에서 자주 사용됩니다. 즉, OOP에서 상속할 때 사용됩니다. 일반적으로 정적 메서드는 상속 시 변경할 수 없는 외부 함수로 대체될 수 있으며 C++/JAVA의 정적 메서드와 매우 유사합니다• 코드 정리에 도움이 되고 네임스페이스의 청결도에 도움이 됩니다
위 내용은 Python의 정적 메서드와 클래스 메서드의 차이점을 기반으로 합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!