На этом шаге мы рассмотрим особенности определения и использования таких методов.
Внутри класса можно создать метод, который будет доступен без создания экземпляра класса (статический метод). Для этого перед определением метода внутри класса следует указать декоратор @staticmethod. Вызов статического метода без создания экземпляра класса осуществляется следующим образом:
<Название класса>.<Название метода>(<Параметры>)
Кроме того, можно вызвать статический метод через экземпляр класса:
<Экземпляр класса>.<Название метода> (<Параметры>)
Приведем пример использования статических методов:
class MyClass: @staticmethod def func1(x, y): # Статический метод return x + y def func2(self, x, y): # Обычный метод в классе return x + y def func3(self, x, y): return MyClass.func1(x, y) # Вызов из метода класса print(MyClass.func1(10, 20)) # Вызываем статический метод c = MyClass() print(c.func2(15, 6)) # Вызываем метод класса print(c.func1(50, 12)) # Вызываем статический метод # через экземпляр класса print(c.func3(23, 5)) # Вызываем статический метод # внутри класса
Результат работы приложения:
30
21
62
28
Обратите внимание на то, что в определении статического метода нет параметра self. Это означает, что внутри статического метода нет доступа к атрибутам и методам экземпляра класса.
Методы класса создаются с помощью декоратора @classmethod. В качестве первого параметра в метод класса передается ссылка на класс, а не на экземпляр класса. Вызов метода класса осуществляется следующим образом:
<Название класса>.<Название метода>(<Параметры>)
Кроме того, можно вызвать метод класса через экземпляр класса:
<Экземпляр класса>.<Название метода> (<Параметры>)
Пример использования методов класса:
class MyClass: @classmethod def func(cls, x): # Метод класса print (cls, x) MyClass.func(10) # Вызываем метод через название класса c = MyClass() c.func(50) # Вызываем метод класса через экземпляр
Результат работы приложения:
<class '__main__.MyClass'> 10
<class '__main__.MyClass'> 50
На следующем шаге мы рассмотрим абстрактные методы.