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)