logo

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 decorateur is een inbouw functie decorateur dat is een expressie 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 instantiemethode de instantie 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?

A 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 klassestatus 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 heeft toegang tot de klassenstatus of kan deze 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. Python ondersteunt nu 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. 

java-string join

Een eenvoudig voorbeeld:

klasse methode:

Python
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:-

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

Quiz maken