logo

Mètode de classe vs mètode estàtic a Python

En aquest article, tractarem el bàsic diferència entre el mètode de classe i el mètode estàtic en Python i quan utilitzar el mètode de classe i el mètode estàtic en python.

Què és el mètode de classe a Python?

El decorador @classmethod és un decorador de funcions integrat que és una expressió que s'avalua després de definir la funció. El resultat d'aquesta avaluació ombreja la definició de la funció. A mètode de classe rep la classe com un primer argument implícit, igual que un mètode d'instància rep la instància



Sintaxi Mètode de classe Python:

 class C(object):  @classmethod  def fun(cls, arg1, arg2, ...): .... fun: function that needs to be converted into a class method returns: a class method for function.>
  • Un mètode de classe és un mètode que està lligat a classe i no l'objecte de la classe.
  • Tenen accés a l'estat de la classe ja que pren un paràmetre de classe que apunta a la classe i no a la instància de l'objecte.
  • Pot modificar un estat de classe que s'aplicaria a totes les instàncies de la classe. Per exemple, pot modificar una variable de classe que serà aplicable a totes les instàncies.

Què és el mètode estàtic en Python?

Un mètode estàtic no rep un primer argument implícit. Un mètode estàtic també és un mètode que està lligat a la classe i no a l'objecte de la classe. Aquest mètode no pot accedir ni modificar l'estat de la classe. Està present en una classe perquè té sentit que el mètode estigui present a classe.

Sintaxi Python Mètode estàtic:



 class C(object):  @staticmethod  def fun(arg1, arg2, ...):  ... returns: a static method for function fun.>

Mètode de classe vs Mètode estàtic

La diferència entre el mètode Class i el mètode estàtic és:

cua de prioritats
  • Un mètode de classe pren cls com a primer paràmetre mentre que un mètode estàtic no necessita paràmetres específics.
  • Un mètode de classe pot accedir o modificar l'estat de la classe mentre que un mètode estàtic no pot accedir-hi ni modificar-lo.
  • En general, els mètodes estàtics no saben res sobre l'estat de classe. Són mètodes de tipus utilitari que prenen alguns paràmetres i treballen sobre aquests paràmetres. D'altra banda, els mètodes de classe han de tenir classe com a paràmetre.
  • Utilitzem @classmethod decorator a Python per crear un mètode de classe i fem servir @staticmethod decorator per crear un mètode estàtic a Python.

Quan utilitzar la classe o el mètode estàtic?

  • En general, utilitzem el mètode de classe per crear mètodes de fàbrica. Els mètodes de fàbrica retornen objectes de classe (similars a un constructor) per a diferents casos d'ús.
  • En general, utilitzem mètodes estàtics per crear funcions d'utilitat.

Com definir un mètode de classe i un mètode estàtic?

Per definir un mètode de classe en Python, fem servir @classmethod decorator, i per definir un mètode estàtic fem servir @staticmethod decorator.
Vegem un exemple per entendre la diferència entre tots dos. Diguem que volem crear una persona de classe. Ara, Python no admet la sobrecàrrega de mètodes com C++ o Java, de manera que utilitzem mètodes de classe per crear mètodes de fàbrica. A l'exemple següent, utilitzem un mètode de classe per crear un objecte persona des de l'any de naixement.

Com s'ha explicat anteriorment, utilitzem mètodes estàtics per crear funcions d'utilitat. A l'exemple següent fem servir un mètode estàtic per comprovar si una persona és adulta o no.



Un exemple senzill:

mètode de classe:

Python 3




class> MyClass:> >def> __init__(>self>, value):> >self>.value>=> value> >def> get_value(>self>):> >return> self>.value> # Create an instance of MyClass> obj>=> MyClass(>10>)> # Call the get_value method on the instance> print>(obj.get_value())># Output: 10>

>

eina de curació gimp

>

Sortida

10>

Mètode estàtic: -

Python 3


quina és la mida de la pantalla del meu ordinador



class> MyClass:> >def> __init__(>self>, value):> >self>.value>=> value> >@staticmethod> >def> get_max_value(x, y):> >return> max>(x, y)> # Create an instance of MyClass> obj>=> MyClass(>10>)> print>(MyClass.get_max_value(>20>,>30>))> print>(obj.get_max_value(>20>,>30>))>

inicialitzador de diccionari c#

>

>

Sortida

30 30>

A continuació es mostra la implementació completa

Python 3




# Python program to demonstrate> # use of class method and static method.> from> datetime>import> date> class> Person:> >def> __init__(>self>, name, age):> >self>.name>=> name> >self>.age>=> age> ># a class method to create a Person object by birth year.> >@classmethod> >def> fromBirthYear(>cls>, name, year):> >return> cls>(name, date.today().year>-> year)> ># a static method to check if a Person is adult or not.> >@staticmethod> >def> isAdult(age):> >return> age>>18> person1>=> Person(>'mayank'>,>21>)> person2>=> Person.fromBirthYear(>'mayank'>,>1996>)> print>(person1.age)> print>(person2.age)> # print the result> print>(Person.isAdult(>22>))>

>

>

com canviar el nom d'un directori linux

Sortida:

21 25 True>

Espai auxiliar: O(1)