Klases metode pret statisko metodi Python

Šajā rakstā mēs apskatīsim pamata atšķirība starp klases metodi un statisko metodi programmā Python un kad izmantot klases metodi un statisko metodi pitonā.

Kas ir klases metode Python?

@classmethod dekorētājs ir iebūvēts funkciju dekorētājs, kas ir izteiksme, kas tiek novērtēta pēc jūsu funkcijas definēšanas. Šī novērtējuma rezultāts aizēno jūsu funkcijas definīciju. A klases metode saņem klasi kā netiešu pirmo argumentu, tāpat kā instances metode saņem instanci

Sintakses Python klases metode:

 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. 
  • Klases metode ir metode, kas ir saistīta ar klasē nevis klases objekts.
  • Viņiem ir piekļuve klases stāvoklim, jo ​​tas aizņem klases parametru, kas norāda uz klasi, nevis uz objekta gadījumu.
  • Tas var mainīt klases stāvokli, kas attiektos uz visiem klases gadījumiem. Piemēram, tas var modificēt klases mainīgo, kas būs piemērojams visiem gadījumiem.

Kas ir Python statiskā metode?

Statiskā metode nesaņem netiešu pirmo argumentu. Statiskā metode ir arī metode, kas ir saistīta ar klasi, nevis ar klases objektu. Šī metode nevar piekļūt klases stāvoklim vai mainīt to. Tā ir sastopama klasē, jo ir jēga, ka metode ir sastopama klasē.

Sintakse Python statiskā metode:

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

Klases metode pret statisko metodi

Atšķirība starp klases metodi un statisko metodi ir:

  • Klases metode izmanto cls kā pirmo parametru, savukārt statiskajai metodei nav nepieciešami īpaši parametri.
  • Klases metode var piekļūt klases stāvoklim vai mainīt to, savukārt statiskā metode nevar piekļūt vai mainīt to.
  • Kopumā statiskās metodes neko nezina par klases stāvokli. Tās ir utilīta metodes, kas ņem dažus parametrus un strādā pie šiem parametriem. No otras puses, klases metodēm ir jābūt klasei kā parametram.
  • Mēs izmantojam @classmethod decorator programmā python, lai izveidotu klases metodi, un mēs izmantojam @staticmethod decorator, lai izveidotu statisku metodi python.

Kad izmantot klasi vai statisko metodi?

  • Mēs parasti izmantojam klases metodi, lai izveidotu rūpnīcas metodes. Rūpnīcas metodes atgriež klases objektus (līdzīgus konstruktoram) dažādiem lietošanas gadījumiem.
  • Mēs parasti izmantojam statiskas metodes, lai izveidotu lietderības funkcijas.

Kā definēt klases metodi un statisko metodi?

Lai definētu klases metodi programmā python, mēs izmantojam @classmethod decorator, bet statiskas metodes definēšanai izmantojam @staticmethod dekorators.
Apskatīsim piemēru, lai saprastu atšķirību starp abiem. Pieņemsim, ka vēlamies izveidot klasi Person. Tagad python neatbalsta metožu pārslodzi, piemēram, C++ vai Java, tāpēc mēs izmantojam klases metodes, lai izveidotu rūpnīcas metodes. Tālāk esošajā piemērā mēs izmantojam klases metodi, lai izveidotu personas objektu no dzimšanas gada.

Kā paskaidrots iepriekš, mēs izmantojam statiskas metodes, lai izveidotu lietderības funkcijas. Tālāk esošajā piemērā mēs izmantojam statisku metodi, lai pārbaudītu, vai persona ir vai nav pieaugusi.

Viens vienkāršs piemērs:

klases metode:

Python3




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>

Izvade

10 

Statiskā metode:

Python3




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

Izvade

30 30 

Tālāk ir sniegta pilnīga ieviešana

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>>> ,> 21> )> person2> => Person.fromBirthYear(> 'mayank'> ,> 1996> )> print> (person1.age)> print> (person2.age)> # print the result> print> (Person.isAdult(> 22> ))>

Izvade:

21 25 True 

Palīgtelpa: O(1)