Рубрики
Без рубрики

@staticmethod в Python

Python @StaticMethod Decorator используется для маркировки метода класса в качестве статического метода, что означает, что его можно сначала вызвать, не призванив. Это

Автор оригинала: Pankaj Kumar.

@staticmethod в Python

@Staticmethod декоратор

Python @staticmethod Декоратор используется для обозначения метода класса в качестве статического метода, что означает, что его можно назвать без усмотра класса. Он просто определяет нормальную функцию, которая логически содержится в классе для читаемости. Здесь нам не нужно проходить экземпляр класса как первый аргумент через Я , в отличие от других классных функций.

class Student():
       def __init__(self, mark):
           self.mark = mark
  
       @staticmethod
       def find_min(mark):
           return min(mark, 100)
  
print(Student.find_min(20))

Выход

20

Доступ к экземплярам классов

Статические методы также могут быть доступны через экземпляры или объекты классов. Например:

class Bank():
       def __init__(self, balance):
           self.balance = balance
  
       @staticmethod
       def find_interest(loan_money, interest_rate):
           return loan_money * (1 + interest_rate)
  
bank = Bank(1000)
print(bank.find_interest(bank.balance, 0.3))

Выход:

1300

Переопределение статических методов

Определения статического метода неизменяются даже после любого наследования, что означает, что это

class ATM(Bank):
    def __init__(self, balance):
        super().__init__(balance)
    
    @staticmethod
    def find_interest(loan_money):
        return loan_money * 1.4

atm = ATM(1000)
print(atm.find_interest(atm.balance))

Выход

1400

@staticmethod vs @classmethod.

Методы класса называются через класс, содержащий его, а не из экземпляра. Вот почему классMethod определяется как class_method (cls, param1, param2) , который не содержит Я , что означает, что его нельзя вызывать с использованием экземпляра класса. Статические методы могут быть вызваны как из экземпляра класса, так и из класса.

@staticmethod vs Методы экземпляра

Методы экземпляра могут быть вызваны только из экземпляра класса, поэтому любой метод экземпляра имеет форму instance_method (self, param1, param2) , где Я Ключевое слово означает, что экземпляр класса вызывает метод. @staticmethod Могут быть вызваны как из экземпляра класса, так и из класса.

StaticMethods.

Вот пример, чтобы поставить все это вместе.

class Bank():
    def __init__(self, balance):
        self.balance = balance

    @staticmethod
    def find_interest(loan_money, interest_rate):
        return loan_money * (1 + interest_rate)

    @classmethod
    def find_interest_classmethod(cls, loan_money):
        return loan_money * 1.4

    def find_interest_instancemethod(self, loan_money):
        if self.balance <= 100:
            return loan_money * 1.2
        else:
            return loan_money * 1.5


class ATM(Bank):
    def __init__(self, balance):
        super().__init__(balance)

    @staticmethod
    def find_interest(loan_money):
        return loan_money * 1.3


atm = ATM(1000)
print('Using staticmethod ->', atm.find_interest(atm.balance))
print('Using classmethod from the parent class ->', Bank.find_interest_classmethod(atm.balance))
print('Using classmethod from the inherited subclass ->', ATM.find_interest_classmethod(atm.balance))
print('Using a regular instance method ->', atm.find_interest_instancemethod(atm.balance))

Выход :

Using staticmethod -> 1300.0
Using classmethod from the parent class -> 1400.0
Using classmethod from the inherited subclass -> 1400.0
Using a regular instance method -> 1500.0

Заключение

Статические методы Python относятся к классу. Они полезны в создании функций, которые не нуждаются в переменных экземпляра для работы. Эта статья показала нам использование случаев @staticmethod и как они сравниваются с другими такими декораторами, а именно @classmethod decorator. Мы также дали сравнение статических методов, методами классов и обычными методами экземпляра и показали, как их можно использовать для упрощения кода класса.

использованная литература

Официальная документация Python: https://docs.cython.org/3/Library/functions.html#staticmethod.html#staticmethod.