V tomto článku se budeme zabývat základními rozdíl mezi metodou třídy a statickou metodou v Pythonu a kdy použít metodu třídy a statickou metodu v pythonu.
Co je metoda třídy v Pythonu?
Dekorátor @classmethod je vestavěný funkční dekoratér to je výraz, který se vyhodnotí poté, co je vaše funkce definována. Výsledek tohoto vyhodnocení zastíní vaši definici funkce. A třídní metoda přijímá třídu jako implicitní první argument, stejně jako metoda instance přijímá instanci
Syntaxe metody třídy Python:
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.
- Metoda třídy je metoda, která je vázána na třída a ne předmět třídy.
- Mají přístup ke stavu třídy, protože vyžaduje parametr třídy, který ukazuje na třídu a ne na instanci objektu.
- Může upravit stav třídy, který by se vztahoval na všechny instance třídy. Může například upravit proměnnou třídy, která bude použitelná pro všechny instance.
Co je statická metoda v Pythonu?
A statická metoda neobdrží implicitní první argument. Statická metoda je také metoda, která je vázána na třídu a ne na objekt třídy. Tato metoda nemůže získat přístup ke stavu třídy nebo jej upravit. Je přítomen ve třídě, protože dává smysl, aby byla metoda přítomna ve třídě.
Syntaxe Python Statická metoda:
class C(object): @staticmethod def fun(arg1 arg2 ...): ... returns: a static method for function fun.
Metoda tříd vs statická metoda
Rozdíl mezi metodou Class a statickou metodou je:
- Metoda třídy bere cls jako první parametr, zatímco statická metoda nepotřebuje žádné specifické parametry.
- Metoda třídy může přistupovat ke stavu třídy nebo jej upravovat, zatímco statická metoda k němu nemůže přistupovat ani jej upravovat.
- Obecně statické metody nevědí nic o stavu třídy. Jsou to metody obslužného typu, které přebírají některé parametry a pracují na těchto parametrech. Na druhou stranu metody třídy musí mít jako parametr třídu.
- K vytvoření metody třídy používáme @classmethod decorator v pythonu a k vytvoření statické metody v pythonu používáme @staticmethod decorator.
Kdy použít třídu nebo statickou metodu?
- K vytvoření továrních metod obecně používáme metodu třídy. Tovární metody vracejí objekty třídy (podobně jako konstruktor) pro různé případy použití.
- K vytváření užitkových funkcí obecně používáme statické metody.
Jak definovat metodu třídy a statickou metodu?
K definování metody třídy v pythonu používáme @classmethod decorator a k definování statické metody používáme @staticmethod decorator.
Podívejme se na příklad, abychom pochopili rozdíl mezi oběma. Řekněme, že chceme vytvořit třídu Osoba. Nyní python nepodporuje přetížení metod jako C++ nebo Jáva takže k vytvoření továrních metod používáme metody tříd. V níže uvedeném příkladu používáme metodu třídy k vytvoření objektu osoby od roku narození.
Jak bylo vysvětleno výše, k vytváření užitkových funkcí používáme statické metody. V níže uvedeném příkladu používáme statickou metodu ke kontrole, zda je osoba dospělá nebo ne.
seznam vytváření java
Jeden jednoduchý příklad:
metoda třídy:
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
Výstup
10
Statická metoda: -
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))
Výstup
30 30
Níže je kompletní Implementace
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))
výstup:
21 25 TruePomocný prostor: O(1)
Vytvořit kvíz