logo

„Python“ klasės metodas prieš statinį metodą

Šiame straipsnyje apžvelgsime pagrindinius Skirtumas tarp klasės metodo ir statinio metodo Python ir kada naudoti klasės metodą ir statinį metodą python'e.

Kas yra klasės metodas Python?

@classmethod dekoratorius yra įtaisytas funkcijų dekoratorius, kuris yra išraiška, kuri įvertinama apibrėžus funkciją. To vertinimo rezultatas užgožia jūsų funkcijos apibrėžimą. A klasės metodas gauna klasę kaip numanomą pirmąjį argumentą, kaip ir egzemplioriaus metodas gauna egzempliorių

Sintaksės Python klasės metodas:



 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.>
  • Klasės metodas yra metodas, susietas su klasė o ne klasės objektas.
  • Jie turi prieigą prie klasės būsenos, nes reikia klasės parametro, kuris nurodo klasę, o ne objekto egzempliorių.
  • Jis gali pakeisti klasės būseną, kuri būtų taikoma visiems klasės egzemplioriams. Pavyzdžiui, jis gali modifikuoti klasės kintamąjį, kuris bus taikomas visiems atvejams.

Kas yra „Python“ statinis metodas?

Statinis metodas negauna numanomo pirmojo argumento. Statinis metodas taip pat yra metodas, susietas su klase, o ne su klasės objektu. Šis metodas negali pasiekti ar keisti klasės būsenos. Jis yra klasėje, nes prasminga, kad metodas būtų klasėje.

Sintaksės Python statinis metodas:

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

Klasės metodas prieš statinį metodą

Skirtumas tarp klasės metodo ir statinio metodo yra toks:

  • Klasės metodas naudoja cls kaip pirmąjį parametrą, o statiniam metodui nereikia jokių konkrečių parametrų.
  • Klasės metodas gali pasiekti arba modifikuoti klasės būseną, o statinis metodas negali jos pasiekti ar modifikuoti.
  • Apskritai statiniai metodai nieko nežino apie klasės būseną. Tai yra naudingumo tipo metodai, kurie paima kai kuriuos parametrus ir dirba pagal tuos parametrus. Kita vertus, klasės metodų parametras turi būti klasė.
  • Mes naudojame @classmethod decorator programoje python kurdami klasės metodą, o naudojame @staticmethod decorator statiniam metodui python sukurti.

Kada naudoti klasę ar statinį metodą?

  • Gamyklos metodams kurti paprastai naudojame klasės metodą. Gamyklos metodai grąžina klasės objektus (panašius į konstruktorių) įvairiems naudojimo atvejams.
  • Naudingumo funkcijoms kurti paprastai naudojame statinius metodus.

Kaip apibrėžti klasės metodą ir statinį metodą?

Norėdami apibrėžti klasės metodą python, naudojame @classmethod decorator, o statiniam metodui apibrėžti naudojame @staticmethod decorator.
Pažvelkime į pavyzdį, kad suprastume skirtumą tarp jų. Tarkime, kad norime sukurti klasę Asmuo. Dabar python nepalaiko metodų perkrovimo, pvz., C++ ar Java, todėl kurdami gamyklinius metodus naudojame klasės metodus. Toliau pateiktame pavyzdyje mes naudojame klasės metodą, kad sukurtume asmens objektą nuo gimimo metų.

Kaip paaiškinta aukščiau, mes naudojame statinius metodus, kad sukurtume naudingų paslaugų funkcijas. Toliau pateiktame pavyzdyje mes naudojame statinį metodą, kad patikrintume, ar asmuo yra suaugęs, ar ne.

Vienas paprastas pavyzdys:

klasės metodas:

Python3

10 iš 40




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>

>

>

palyginti eilutėje
Išvestis

10>

Statinis metodas:

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

Java sąrašo metodai

>

>

Išvestis

30 30>

Žemiau pateikiamas visas įgyvendinimas

Python3


js pakeitimas



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

>

>

Išvestis:

21 25 True>

Pagalbinė erdvė: O(1)