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

不言
풀어 주다: 2018-06-02 15:34:22
원래의
1997명이 탐색했습니다.

이 글은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿