The metoda clasa() este o funcție încorporată în Python, care returnează o metodă de clasă pentru o funcție dată.
classmethod() în sintaxa Python
Sintaxă: clasa metoda(funcția)
Parametru: Această funcție acceptă numele funcției ca parametru.
Tip returnare: Această funcție returnează metoda clasei convertite.
Funcția Python classmethod().
Metodele classmethod() sunt legate mai degrabă de o clasă decât de un obiect. Metodele de clasă pot fi apelate atât de clasă, cât și de obiect. Aceste metode pot fi apelate cu o clasă sau cu un obiect.
Metoda clasei vs metoda statică
Diferența de bază dintre metoda clasei vs metoda statică în Python și când să folosiți metoda clasei și metoda statică în Piton .
- O metodă de clasă ia cls ca prim parametru, în timp ce o metodă statică nu are nevoie de parametri specifici.
- O metodă de clasă poate accesa sau modifica starea clasei, în timp ce o metodă statică nu o poate accesa sau modifica.
- În general, metodele statice nu știu nimic despre starea clasei. Sunt metode de tip utilitar care preiau anumiți parametri și lucrează asupra acelor parametri. Pe de altă parte, metodele de clasă trebuie să aibă clasa ca parametru.
- Folosim @classmethod decorator în Python pentru a crea o metodă de clasă și folosim @staticmethod decorator pentru a crea o metodă statică în Python.
Exemplu de metodă de clasă în Python
Creați o metodă simplă de clasă
În acest exemplu, vom vedea cum să creăm o metodă de clasă în Python. Pentru aceasta, am creat o clasă numită Geeks cu un curs variabil membru și am creat o funcție numită buy care imprimă obiectul. Acum, am trecut metodaGeeks.purchase>într-o metodă de clasă folosind@classmethod>decorator, care convertește metoda într-o metodă de clasă. Cu metoda clasei activată, putem apela funcția de cumpărare fără a crea un obiect funcție, folosind direct numele de clasă Geeks.
numerotarea alfabetului
Python3
class> geeks:> >course>=> 'DSA'> >def> purchase(obj):> >print>(>'Purchase course : '>, obj.course)> geeks.purchase>=> classmethod>(geeks.purchase)> geeks.purchase()> |
>
>Ieșire
cate saptamani intr-o luna
Purchase course : DSA>
Creați metoda clasei folosind classmethod()
A creat print_name classmethod înainte de a crea această linie print_name() Poate fi apelată numai cu un obiect nu cu clasa acum această metodă poate fi numită ca classmethod.
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()> |
>
>Ieșire
The name is : Geeksforgeeks>
Metoda fabrică folosind o metodă Class
Utilizările funcției classmethod() sunt utilizate în modelele de proiectare din fabrică, unde dorim să apelăm multe funcții cu numele clasei, mai degrabă decât cu un obiect.
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()> |
>
c
>Ieșire
Name : mayank Age : 21>
Cum funcționează metoda clasei pentru moștenire?
În acest exemplu, facem ierarhie de clasă Python cu două clase,Person>șiMan>, și demonstrează utilizarea metodelor de clasă și a moștenirii.
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))> |
>
>
ce este hashmap javaIeșire
True False>
Decorator Python @classmethod
Decoratorul @classmethod este încorporat decorator de funcții care este o expresie care este evaluată după ce funcția dvs. este definită. Rezultatul acelei evaluări umbrește definiția funcției dvs. O metodă de clasă primește clasa ca prim argument implicit, la fel cum o metodă de instanță primește instanța.
Sintaxa metodei de clasă Decorator
clasa C (obiect):
@classmethod
def fun(cls, arg1, arg2, …):
….
Unde,
- distracţie: funcția care trebuie convertită într-o metodă de clasă
- se intoarce: o metodă de clasă pentru funcție.
Notă:
- O metodă de clasă este o metodă care este legată de clasă și nu de obiectul clasei.
- Ei au acces la starea clasei, deoarece este nevoie de un parametru de clasă care indică spre clasă și nu spre instanța obiectului.
- Poate modifica o stare de clasă care s-ar aplica în toate instanțele clasei. De exemplu, poate modifica o variabilă de clasă care ar fi aplicabilă tuturor instanțelor.
Exemplu
int la char
În exemplul de mai jos, folosim o staticmethod() și classmethod() pentru a verifica dacă o persoană este adultă sau nu.
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>))> |
>
>Ieșire
21 27 True>