Heim  >  Artikel  >  Backend-Entwicklung  >  Basierend auf dem Unterschied zwischen statischer Methode und Klassenmethode in Python

Basierend auf dem Unterschied zwischen statischer Methode und Klassenmethode in Python

不言
不言Original
2018-06-02 15:34:221956Durchsuche

Dieser Artikel stellt hauptsächlich den Unterschied zwischen statischer Methode und Klassenmethode in Python vor. Jetzt kann ich ihn mit allen

Beispielen teilen >

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()

Die obige Klasse verfügt über drei Funktionen, die wie folgt verwendet werden:


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)

Unterschiede

• Der Aufrufer von foo() muss eine Instanz der Klasse A sein, der Aufrufer von class_foo() und static_foo () Es kann sich entweder um eine Klasse oder eine Instanz handeln. Die Parameter foo() sind unterschiedlich. Der Parameter class_foo() verwendet die Klasse (cls), um self zu ersetzen Der Parameter static_foo() hat nur Parameter. Es gibt kein self und keine Klasse (cls)

• foo() in a.foo(1) ist an a gebunden, class_foo() ist an die Klasse gebunden und static_foo () ist an beide gebunden. Keine sind gebunden. Sie können Drucken zum Anzeigen wie folgt verwenden:

"
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)
# 
"

Funktion

• Verwendungsszenarien: Die Klassenmethode wird häufig in einigen Factory-Klassen verwendet, was bedeutet, dass sie bei der Vererbung in OOP im Allgemeinen durch eine externe Funktion ersetzt werden kann, die bei Vererbung nicht geändert werden kann, und in C++ /JAVA Die statischen Methoden in sind sehr ähnlich

• Es trägt zur Organisation des Codes und zur Sauberkeit des Namespace bei

Das obige ist der detaillierte Inhalt vonBasierend auf dem Unterschied zwischen statischer Methode und Klassenmethode in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn