>백엔드 개발 >파이썬 튜토리얼 >Python의 정적 메서드와 클래스 메서드의 차이점을 기반으로 합니다.

Python의 정적 메서드와 클래스 메서드의 차이점을 기반으로 합니다.

不言
不言원래의
2018-06-02 15:34:222055검색

이 글은 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 &#39;__main__.A&#39;>,1)

A.class_foo(1)
# executing class_foo(<class &#39;__main__.A&#39;>,1)

-----------------------------------------------------------------

a.static_foo(1)
# executing static_foo(1)

A.static_foo(&#39;hi&#39;)
# 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 &#39;main.A&#39;>>

print A.class_foo
<bound method classobj.class_foo of >

print(a.static_foo)
# 
print(A.static_foo)
# 
"

Function

• 클래스 메소드는 일부 팩토리 클래스에서 자주 사용됩니다. 즉, OOP에서 상속할 때 사용됩니다. 일반적으로 정적 메서드는 상속 시 변경할 수 없는 외부 함수로 대체될 수 있으며 C++/JAVA의 정적 메서드와 매우 유사합니다• 코드 정리에 도움이 되고 네임스페이스의 청결도에 도움이 됩니다

위 내용은 Python의 정적 메서드와 클래스 메서드의 차이점을 기반으로 합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.