Шаг 142.
Основы языка Python. Объектно-ориентированное программирование (ООП). Статические методы и методы класса

    На этом шаге мы рассмотрим особенности определения и использования таких методов.

    Внутри класса можно создать метод, который будет доступен без создания экземпляра класса (статический метод). Для этого перед определением метода внутри класса следует указать декоратор @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

    На следующем шаге мы рассмотрим абстрактные методы.




Предыдущий шаг Содержание Следующий шаг