logo

classmethod() in Python

De klassemethode() is een ingebouwde functie in Python, die een klassenmethode retourneert voor een bepaalde functie.

classmethod() in Python-syntaxis

Syntaxis: klassenmethode(functie)

Parameter : Deze functie accepteert de functienaam als parameter.



Retourtype: Deze functie retourneert de geconverteerde klassenmethode.

Python classmethod() Functie

De classmethod()-methoden zijn gebonden aan een klasse in plaats van aan een object. Klassemethoden kunnen door zowel klasse als object worden aangeroepen. Deze methoden kunnen worden aangeroepen met een klasse of met een object.

Klassemethode versus statische methode

Het fundamentele verschil tussen de klassenmethode versus statische methode in Python en wanneer de klassenmethode en de statische methode moeten worden gebruikt Python .

  • Een klassenmethode neemt cls als de eerste parameter, terwijl een statische methode geen specifieke parameters nodig heeft.
  • Een klassenmethode kan de klassestatus openen of wijzigen, terwijl een statische methode deze niet kan openen of wijzigen.
  • Over het algemeen weten statische methoden niets over de klassenstatus. Het zijn methoden van het hulpprogramma die een aantal parameters gebruiken en op die parameters werken. Aan de andere kant moeten klassemethoden klasse als parameter hebben.
  • We gebruiken @classmethod decorateur in Python om een ​​klassenmethode te maken en we gebruiken @staticmethod decorateur om een ​​statische methode in Python te maken.

Voorbeeld van klassenmethode in Python

Creëer een eenvoudige lesmethode

In dit voorbeeld gaan we zien hoe je een klassenmethode in Python kunt maken. Hiervoor hebben we een klasse gemaakt met de naam Geeks met een ledenvariabele cursus en een functie gemaakt met de naam aankoop die het object afdrukt. Nu hebben we de methode doorstaanGeeks.purchase>in een klassenmethode met behulp van de@classmethod>decorateur, die de methode omzet in een klassenmethode. Als de klassenmethode is geïnstalleerd, kunnen we de functie aankoop aanroepen zonder een functieobject te maken, rechtstreeks met behulp van de klassenaam Geeks.

Python3




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

>

>

Uitvoer

Purchase course : DSA>

Maak een klassemethode met classmethod()

Print_name classmethod gemaakt voordat deze regel werd gemaakt print_name() Het kan alleen worden aangeroepen met een object dat niet met de klasse is. Nu kan deze methode worden aangeroepen als classmethod print_name() methode wordt een klassemethode genoemd.

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

>

>

soorten computers
Uitvoer

The name is : Geeksforgeeks>

Fabrieksmethode met behulp van een Class-methode

Het gebruik van de functie classmethod() wordt gebruikt in fabrieksontwerppatronen waarbij we veel functies willen aanroepen met de klassenaam in plaats van met een object.

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

>

Verilog-zaakverklaring
>

Uitvoer

Name : mayank Age : 21>

Hoe werkt de klassenmethode voor de overerving?

In dit voorbeeld maken we een Python-klassenhiërarchie met twee klassen,Person>EnMan>, en demonstreert het gebruik van klassenmethoden en overerving.

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

>

>

Uitvoer

True False>

Python @classmethod-decorateur

De @classmethod decorateur is een inbouw functie decorateur Dit is een expressie die wordt geëvalueerd nadat uw functie is gedefinieerd. Het resultaat van die evaluatie vormt een schaduw voor uw functiedefinitie. Een klassemethode ontvangt de klasse als het impliciete eerste argument, net zoals een instantiemethode de instantie ontvangt.

Syntaxis van classmethod Decorator

klasse C(object):

@klasmethode

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

….

Waar,

  • plezier: de functie die moet worden omgezet in een klassenmethode
  • geeft terug: een klassenmethode voor functie.

Opmerking:

  • Een klassenmethode is een methode die gebonden is aan de klasse en niet aan het object van de klasse.
  • Ze hebben toegang tot de status van de klasse, omdat er een klasseparameter voor nodig is die naar de klasse verwijst en niet naar de objectinstantie.
  • Het kan een klassestatus wijzigen die van toepassing zou zijn op alle instanties van de klasse. Het kan bijvoorbeeld een klassevariabele wijzigen die op alle instanties van toepassing zou zijn.

Voorbeeld

In het onderstaande voorbeeld gebruiken we een staticmethod() en classmethod() om te controleren of een persoon volwassen is of niet.

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

>

>

Uitvoer

21 27 True>