Klassemethode versus statische methode in Python

In dit artikel behandelen we de basis verschil tussen de klassenmethode en de statische methode in Python en wanneer de klassenmethode en de statische methode moeten worden gebruikt in python.

Wat is klassenmethode in Python?

De @classmethod-decorator is een ingebouwde functie-decorator die een expressie is die wordt geëvalueerd nadat uw functie is gedefinieerd. Het resultaat van die evaluatie vormt een schaduw voor uw functiedefinitie. A klasse methode ontvangt de klasse als een impliciet eerste argument, net zoals een instancemethode de instance ontvangt

Syntaxis Python Class-methode:

 class C(object):  @classmethod  def fun(cls, arg1, arg2, ...): .... fun: function that needs to be converted into a class method returns: a class method for function. 
  • Een klassenmethode is een methode die gebonden is aan de klas en niet 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 van toepassing is op alle instanties.

Wat is de statische methode in Python?

Een statische methode krijgt geen impliciet eerste argument. Een statische methode is ook een methode die gebonden is aan de klasse en niet aan het object van de klasse. Deze methode heeft geen toegang tot de klassenstatus en kan deze ook niet wijzigen. Het is aanwezig in een klas omdat het logisch is dat de methode aanwezig is in de klas.

Syntaxis Python Statische methode:

 class C(object):  @staticmethod  def fun(arg1, arg2, ...):  ... returns: a static method for function fun. 

Klassenmethode versus statische methode

Het verschil tussen de Class-methode en de statische methode is:

  • 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.

Wanneer gebruik je de klasse- of statische methode?

  • Over het algemeen gebruiken we de klassenmethode om fabrieksmethoden te maken. Fabrieksmethoden retourneren klasseobjecten (vergelijkbaar met een constructor) voor verschillende gebruiksscenario's.
  • Over het algemeen gebruiken we statische methoden om hulpprogrammafuncties te creëren.

Hoe definieer ik een klassenmethode en een statische methode?

Om een ​​klassenmethode in Python te definiëren, gebruiken we @classmethod decorateur, en om een ​​statische methode te definiëren gebruiken we @staticmethod decorateur.
Laten we naar een voorbeeld kijken om het verschil tussen beide te begrijpen. Laten we zeggen dat we een klasse Persoon willen maken. Nu ondersteunt Python geen overbelasting van methoden zoals C++ of Java, dus gebruiken we klassenmethoden om fabrieksmethoden te maken. In het onderstaande voorbeeld gebruiken we een klassenmethode om een ​​persoonsobject vanaf geboortejaar te maken.

Zoals hierboven uitgelegd gebruiken we statische methoden om nutsfuncties te creëren. In het onderstaande voorbeeld gebruiken we een statische methode om te controleren of een persoon volwassen is of niet.

Een eenvoudig voorbeeld:

klasse methode:

Python3




class> MyClass:> > def> __init__(> self> , value):> > self> .value> => value> > def> get_value(> self> ):> > return> self> .value> # Create an instance of MyClass> obj> => MyClass(> 10> )> # Call the get_value method on the instance> print> (obj.get_value())> # Output: 10>

Uitvoer

10 

Statische methode:-

Python3




class> MyClass:> > def> __init__(> self> , value):> > self> .value> => value> > @staticmethod> > def> get_max_value(x, y):> > return> max> (x, y)> # Create an instance of MyClass> obj> => MyClass(> 10> )> print> (MyClass.get_max_value(> 20> ,> 30> ))> print> (obj.get_max_value(> 20> ,> 30> ))>

Uitvoer

30 30 

Hieronder vindt u de volledige implementatie

Python3




# Python program to demonstrate> # use of 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> ))>

Uitgang:

21 25 True 

Hulpruimte: O(1)