I den här artikeln kommer vi att täcka det grundläggande skillnad mellan klassmetoden vs statisk metod i Python och när man ska använda klassmetoden och statisk metod i python.
Vad är klassmetoden i Python?
@classmethod-dekoratören är en inbyggd funktion dekoratör det är ett uttryck som utvärderas efter att din funktion har definierats. Resultatet av den utvärderingen skuggar din funktionsdefinition. A klass metod tar emot klassen som ett implicit första argument precis som en instansmetod tar emot instansen
Syntax Python-klassmetod:
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.
- En klassmetod är en metod som är bunden till klass och inte föremålet för klassen.
- De har tillgång till klassens tillstånd eftersom den kräver en klassparameter som pekar på klassen och inte objektinstansen.
- Det kan ändra ett klasstillstånd som skulle gälla för alla instanser av klassen. Till exempel kan den modifiera en klassvariabel som kommer att vara tillämplig på alla instanser.
Vad är den statiska metoden i Python?
A statisk metod inte får ett implicit första argument. En statisk metod är också en metod som är bunden till klassen och inte klassens objekt. Den här metoden kan inte komma åt eller ändra klasstillståndet. Det finns i en klass eftersom det är vettigt att metoden finns i klassen.
Syntax Python statisk metod:
class C(object): @staticmethod def fun(arg1 arg2 ...): ... returns: a static method for function fun.
Klassmetod vs statisk metod
Skillnaden mellan klassmetoden och den statiska metoden är:
- En klassmetod tar cls som den första parametern medan en statisk metod inte behöver några specifika parametrar.
- En klassmetod kan komma åt eller ändra klasstillståndet medan en statisk metod inte kan komma åt eller ändra den.
- I allmänhet vet statiska metoder ingenting om klasstillståndet. De är metoder av verktygstyp som tar vissa parametrar och arbetar med dessa parametrar. Å andra sidan måste klassmetoder ha klass som parameter.
- Vi använder @classmethod decorator i python för att skapa en klassmetod och vi använder @staticmethod decorator för att skapa en statisk metod i python.
När ska man använda klassmetoden eller statisk metod?
- Vi använder vanligtvis klassmetoden för att skapa fabriksmetoder. Fabriksmetoder returnerar klassobjekt (liknande en konstruktor) för olika användningsfall.
- Vi använder i allmänhet statiska metoder för att skapa verktygsfunktioner.
Hur definierar man en klassmetod och en statisk metod?
För att definiera en klassmetod i python använder vi @classmethod decorator och för att definiera en statisk metod använder vi @staticmethod decorator.
Låt oss titta på ett exempel för att förstå skillnaden mellan dem båda. Låt oss säga att vi vill skapa en klassperson. Nu stöder inte python metodöverbelastning som C++ eller Java så vi använder klassmetoder för att skapa fabriksmetoder. I exemplet nedan använder vi en klassmetod för att skapa ett personobjekt från födelseår.
Som förklarats ovan använder vi statiska metoder för att skapa verktygsfunktioner. I exemplet nedan använder vi en statisk metod för att kontrollera om en person är vuxen eller inte.
inkapsling java
Ett enkelt exempel:
klass metod:
Pythonclass 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
Produktion
10
Statisk metod:-
Pythonclass 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))
Produktion
30 30
Nedan är den fullständiga implementeringen
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))
Produktion:
21 25 TrueHjälputrymme: O(1)
Skapa frågesport