logo

Metoda třídy vs statická metoda v Pythonu

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:

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 

Výstup
10

Statická metoda: -

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

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 True

Pomocný prostor: O(1)

Vytvořit kvíz