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