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 integrat decorador de funcions aquesta é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?

A 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:

  • 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 per tant, 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. 

ordenant la llista en java

Un exemple senzill:

mètode de classe:

Python
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 

Sortida
10

Mètode estàtic: -

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

Sortida
30 30

A continuació es mostra la implementació completa 

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

Sortida:

21 25 True

Espai auxiliar: O(1)

Crea un qüestionari