logo

classmethod() Python

The klasės metodas () yra „Python“ integruota funkcija, kuri grąžina tam tikros funkcijos klasės metodą.

classmethod() Python sintaksėje

Sintaksė: klasės metodas (funkcija)

Parametras : Ši funkcija priima funkcijos pavadinimą kaip parametrą.



Grąžinimo tipas: Ši funkcija grąžina konvertuotos klasės metodą.

Python classmethod() Funkcija

Classmethod() metodai yra susieti su klase, o ne su objektu. Klasės metodus gali iškviesti ir klasė, ir objektas. Šiuos metodus galima iškviesti su klase arba su objektu.

Klasės metodas prieš statinį metodą

Pagrindinis skirtumas tarp klasės metodas prieš statinį metodą Python ir kada naudoti klasės metodą ir statinį metodą Python .

  • 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, kad sukurtume klasės metodą, o mes naudojame @staticmethod decorator statiniam metodui Python sukurti.

Python klasės metodo pavyzdys

Sukurkite paprastą klasės metodą

Šiame pavyzdyje pamatysime, kaip Python sukurti klasės metodą. Tam sukūrėme klasę pavadinimu Geeks su nario kintamuoju kursu ir sukūrėme funkciją, pavadintą pirkimas, kuri spausdina objektą. Dabar mes išlaikėme metodąGeeks.purchase>į klasės metodą naudojant@classmethod>dekoratorius, kuris konvertuoja metodą į klasės metodą. Turėdami klasės metodą, galime iškviesti funkcijos pirkimą nekurdami funkcijos objekto, tiesiogiai naudodami klasės pavadinimą Geeks.

Python3




class> geeks:> >course>=> 'DSA'> >def> purchase(obj):> >print>(>'Purchase course : '>, obj.course)> geeks.purchase>=> classmethod>(geeks.purchase)> geeks.purchase()>

>

burbulų rūšiavimas
>

Išvestis

Purchase course : DSA>

Sukurkite klasės metodą naudodami classmetho()

Sukurtas spausdinimo_vardas klasės metodas prieš kuriant šią eilutę print_name() Jį galima iškviesti tik su objektu, o ne su klase. Dabar šis metodas gali būti vadinamas klasės metodu print_name() metodas vadinamas klasės metodu.

Python3




class> Student:> ># create a variable> >name>=> 'Geeksforgeeks'> ># create a function> >def> print_name(obj):> >print>(>'The name is : '>, obj.name)> # create print_name classmethod> # before creating this line print_name()> # It can be called only with object not with class> Student.print_name>=> classmethod>(Student.print_name)> # now this method can be called as classmethod> # print_name() method is called a class method> Student.print_name()>

>

konvertuoti eilutę į datą

>

Išvestis

The name is : Geeksforgeeks>

Gamyklos metodas naudojant klasės metodą

Funkcijos classmethod() naudojimas yra naudojamas gamykliniuose projektavimo modeliuose, kai norime iškviesti daug funkcijų klasės pavadinimu, o ne objektu.

Python3




# Python program to demonstrate> # use of a 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)> >def> display(>self>):> >print>(>'Name : '>,>self>.name,>'Age : '>,>self>.age)> person>=> Person(>'mayank'>,>21>)> person.display()>

>

>

Išvestis

Name : mayank Age : 21>

Kaip klasės metodas veikia paveldėjimui?

Šiame pavyzdyje mes kuriame Python klasės hierarchiją su dviem klasėmis,Person>irMan>, ir demonstruoja klasės metodų naudojimą bei paveldėjimą.

Python3




from> datetime>import> date> # random Person> class> Person:> >def> __init__(>self>, name, age):> >self>.name>=> name> >self>.age>=> age> >@staticmethod> >def> from_FathersAge(name, fatherAge, fatherPersonAgeDiff):> >return> Person(name, date.today().year>-> fatherAge>+> fatherPersonAgeDiff)> >@classmethod> >def> from_BirthYear(>cls>, name, birthYear):> >return> cls>(name, date.today().year>-> birthYear)> >def> display(>self>):> >print>(>self>.name>+> ''s age is: '> +> str>(>self>.age))> class> Man(Person):> >sex>=> 'Female'> man>=> Man.from_BirthYear(>'John'>,>1985>)> print>(>isinstance>(man, Man))> man1>=> Man.from_FathersAge(>'John'>,>1965>,>20>)> print>(>isinstance>(man1, Man))>

>

>

Išvestis

True False>

Python @classmethod dekoratorius

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

Klasės metodo Dekoratoriaus sintaksė

C klasė (objektas):

@klasės metodas

def fun (cls, arg1, arg2, ...):

….

kur,

c
  • linksma: funkcija, kurią reikia konvertuoti į klasės metodą
  • grąžina: funkcijos klasės metodas.

Pastaba:

  • Klasės metodas yra metodas, susietas su klase, o ne su klasės objektu.
  • 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 būtų taikomas visiems atvejams.

Pavyzdys

Toliau pateiktame pavyzdyje mes naudojame staticmethod() ir classmethod() norėdami patikrinti, ar asmuo yra suaugęs, ar ne.

Python3




# Python program to demonstrate> # use of a 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 27 True>