logo

classmethod() în Python

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 java
Ieș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>>>>person1>=> 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>