The classmethod() je vgrajena funkcija v Pythonu, ki vrne metodo razreda za dano funkcijo.
classmethod() v sintaksi Python
Sintaksa: razredna metoda (funkcija)
Parameter: Ta funkcija sprejme ime funkcije kot parameter.
Vrsta vračila: Ta funkcija vrne metodo pretvorjenega razreda.
Funkcija Python classmethod().
Metode classmethod() so vezane na razred in ne na objekt. Metode razreda lahko kličeta tako razred kot objekt. Te metode lahko pokličete z razredom ali z objektom.
Metoda razreda vs. statična metoda
Osnovna razlika med metoda razreda proti statični metodi v Pythonu in kdaj uporabiti metodo razreda in statično metodo Python .
- Metoda razreda vzame cls kot prvi parameter, medtem ko statična metoda ne potrebuje posebnih parametrov.
- Metoda razreda lahko dostopa do stanja razreda ali ga spreminja, medtem ko statična metoda ne more dostopati ali ga spreminjati.
- Na splošno statične metode ne vedo ničesar o stanju razreda. So metode pomožnega tipa, ki vzamejo nekaj parametrov in delajo na teh parametrih. Po drugi strani pa morajo metode razreda imeti razred kot parameter.
- V Pythonu uporabljamo dekorater @classmethod za ustvarjanje metode razreda in @staticmethod dekorater za ustvarjanje statične metode v Pythonu.
Primer metode razreda v Pythonu
Ustvarite preprosto razredno metodo
V tem primeru si bomo ogledali, kako ustvariti metodo razreda v Pythonu. Za to smo ustvarili razred z imenom Geeks s člansko spremenljivko course in ustvarili funkcijo z imenom purchase, ki natisne predmet. Zdaj smo opravili metodoGeeks.purchase>v metodo razreda z uporabo@classmethod>dekorater, ki pretvori metodo v metodo razreda. Z metodo razreda lahko pokličemo nakup funkcije, ne da bi ustvarili funkcijski objekt, neposredno z uporabo imena razreda Geeks.
Python3
class> geeks:> >course>=> 'DSA'> >def> purchase(obj):> >print>(>'Purchase course : '>, obj.course)> geeks.purchase>=> classmethod>(geeks.purchase)> geeks.purchase()> |
>
>Izhod
metoda java podniz
Purchase course : DSA>
Ustvari metodo razreda z uporabo classmethod()
Ustvaril print_name classmethod pred ustvarjanjem te vrstice print_name() Pokliče se lahko samo z objektom, ne z razredom, zdaj pa se lahko ta metoda kliče kot classmethod. Metoda print_name() se imenuje metoda razreda.
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()> |
>
>
ukaz arp-aIzhod
The name is : Geeksforgeeks>
Tovarniška metoda z uporabo metode razreda
Uporaba funkcije classmethod() se uporablja v vzorcih tovarniškega načrtovanja, kjer želimo poklicati veliko funkcij z imenom razreda in ne z objektom.
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()> |
>
>Izhod
Name : mayank Age : 21>
Kako metoda razreda deluje pri dedovanju?
V tem primeru izdelujemo hierarhijo razredov Python z dvema razredoma,Person>inMan>in prikazuje uporabo razrednih metod in dedovanja.
Python3
c
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))> |
>
>Izhod
True False>
Python @classmethod dekorater
Dekorater @classmethod je vgrajen dekorater funkcije ki je izraz, ki se ovrednoti po definiranju vaše funkcije. Rezultat te ocene zasenči vašo definicijo funkcije. Metoda razreda prejme razred kot implicitni prvi argument, tako kot metoda primerka prejme primerek.
Sintaksa metode razreda Decorator
razred C (objekt):
@classmethod
def fun(cls, arg1, arg2, …):
….
Kje,
- zabavno: funkcija, ki jo je treba pretvoriti v metodo razreda
- vrne: metoda razreda za funkcijo.
Opomba:
- Metoda razreda je metoda, ki je vezana na razred in ne na objekt razreda.
- Imajo dostop do stanja razreda, saj ima parameter razreda, ki kaže na razred in ne na primerek objekta.
- Lahko spremeni stanje razreda, ki bi veljalo za vse primerke razreda. Na primer, lahko spremeni spremenljivko razreda, ki bi bila uporabna za vse primerke.
Primer
V spodnjem primeru uporabljamo staticmethod() in classmethod(), da preverimo, ali je oseba odrasla ali 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>>18> person1>=> Person(>'mayank'>,>21>)> person2>=> Person.fromBirthYear(>'mayank'>,>1996>)> print>(person1.age)> print>(person2.age)> # print the result> print>(Person.isAdult(>22>))> |
>
primerjaj niz java
>Izhod
21 27 True>