Maison  >  Article  >  développement back-end  >  Basé sur la différence entre la méthode statique et la méthode de classe en python

Basé sur la différence entre la méthode statique et la méthode de classe en python

不言
不言original
2018-06-02 15:34:221956parcourir

Cet article présente principalement la différence entre la méthode statique et la méthode de classe en python. Il a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent se référer à des

exemples

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

La classe ci-dessus a trois fonctions, qui sont utilisées comme suit :


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)

Différence

• L'appelant de foo() doit être une instance de classe A, class_foo() et static_foo( L'appelant de ) peut être soit une classe, soit une instance

• Les paramètres sont différents, le paramètre foo() est self et d'autres paramètres, le paramètre class_foo() utilise la classe (cls) pour remplacer self, static_foo() Ensuite, il n'y a que des paramètres, pas de self et class (cls)

• foo() dans a.foo(1) est lié à a, class_foo() est lié à la classe, et static_foo() Il n'est lié à aucun d'eux et peut être visualisé en utilisant print, comme suit :

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

Fonction

• Scénarios d'utilisation : la méthode de classe est souvent utilisée dans certaines classes d'usine, ce qui signifie qu'elle est utilisée lors de l'héritage en POO. En général, la méthode statique peut être remplacée par une fonction externe, mais cette dernière ne le peut pas. être hérité. Changement, très similaire aux méthodes statiques en C++/JAVA

• Il est avantageux d'organiser le code et de nettoyer l'espace de noms

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn