logo

classmethod() Python

The klases metode () ir Python iebūvēta funkcija, kas atgriež klases metodi noteiktai funkcijai.

classmethod() Python sintaksē

Sintakse: klases metode (funkcija)



Parametrs: Šī funkcija pieņem funkcijas nosaukumu kā parametru.

Atgriešanas veids: Šī funkcija atgriež konvertētās klases metodi.

Python classmethod() Funkcija

Classmethod() metodes ir saistītas ar klasi, nevis objektu. Klases metodes var izsaukt gan klase, gan objekts. Šīs metodes var izsaukt ar klasi vai ar objektu.



npm kešatmiņas notīrīšana

Klases metode pret statisko metodi

Galvenā atšķirība starp klases metode pret statisko metodi Python un kad lietot klases metodi un statisko metodi Python .

  • Klases metode izmanto cls kā pirmo parametru, savukārt statiskajai metodei nav nepieciešami īpaši parametri.
  • Klases metode var piekļūt klases stāvoklim vai mainīt to, savukārt statiskā metode nevar piekļūt vai mainīt to.
  • Kopumā statiskās metodes neko nezina par klases stāvokli. Tās ir utilīta metodes, kas ņem dažus parametrus un strādā pie šiem parametriem. No otras puses, klases metodēm ir jābūt klasei kā parametram.
  • Mēs izmantojam @classmethod decorator programmā Python, lai izveidotu klases metodi, un mēs izmantojam @staticmethod decorator, lai izveidotu statisku metodi Python.

Klases metodes piemērs Python

Izveidojiet vienkāršu klases metodi

Šajā piemērā mēs redzēsim, kā Python izveidot klases metodi. Šim nolūkam mēs izveidojām klasi ar nosaukumu Geeks ar dalībnieku mainīgo kursu un izveidojām funkciju pirkums, kas izdrukā objektu. Tagad mēs izturējām metodiGeeks.purchase>klases metodē, izmantojot@classmethod>dekorators, kas metodi pārvērš klases metodē. Izmantojot klases metodi, mēs varam izsaukt funkcijas iegādi, neveidojot funkcijas objektu, tieši izmantojot klases nosaukumu Geeks.

Python3






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

>

>

Izvade

Purchase course : DSA>

Izveidojiet klases metodi, izmantojot classmetho()

Izveidota drukas_nosaukums klases metode pirms šīs rindas izveides drukas_nosaukums() To var izsaukt tikai ar objektu, nevis ar klasi tagad šo metodi var izsaukt kā classmethod print_name() metodi sauc par klases metodi.

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()>

>

>

Izvade

The name is : Geeksforgeeks>

Rūpnīcas metode, izmantojot klases metodi

Funkcijas classmethod() lietojumi tiek izmantoti rūpnīcas dizaina modeļos, kur mēs vēlamies izsaukt daudzas funkcijas ar klases nosaukumu, nevis objektu.

Python3


java nomaiņas virkne



# 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()>

>

>

Izvade

Name : mayank Age : 21>

Kā klases metode darbojas mantojuma gadījumā?

Šajā piemērā mēs veidojam Python klases hierarhiju ar divām klasēm,Person>unMan>, un demonstrē klases metožu un mantojuma izmantošanu.

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

>

>

Izvade

True False>

Python @classmethod dekorētājs

@classmethod dekorators ir iebūvēts funkciju dekorētājs kas ir izteiksme, kas tiek novērtēta pēc jūsu funkcijas definēšanas. Šī novērtējuma rezultāts aizēno jūsu funkcijas definīciju. Klases metode saņem klasi kā netiešo pirmo argumentu, tāpat kā instances metode saņem instanci.

Klases metodes Dekoratora sintakse

C klase (objekts):

@klases metode

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

….

kur,

  • jautri: funkcija, kas jāpārvērš klases metodē
  • atgriež: klases metode funkcijai.

Piezīme:

  • Klases metode ir metode, kas ir saistīta ar klasi, nevis ar klases objektu.
  • Viņiem ir piekļuve klases stāvoklim, jo ​​tas aizņem klases parametru, kas norāda uz klasi, nevis uz objekta gadījumu.
  • Tas var mainīt klases stāvokli, kas attiektos uz visiem klases gadījumiem. Piemēram, tas var modificēt klases mainīgo, kas būtu piemērojams visiem gadījumiem.

Piemērs

Tālāk esošajā piemērā mēs izmantojam staticmethod() un classmethod(), lai pārbaudītu, vai persona ir vai nav pieaugušais.

iskcon pilna forma

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

>

>

Izvade

21 27 True>