Питон классы статические методы

Статические переменные и методы в Python

Статическая переменная и статический метод – это широко используемые концепции программирования на различных языках, таких как C ++, PHP, Java и т. l. Эти переменные и методы принадлежат классу и объектам. В этом разделе мы узнаем, как создать статические переменные и методы в Python.

Что такое статическая переменная Python?

Когда мы объявляем переменную внутри класса, но вне метода, она называется статической переменной или переменной класса. Ее можно вызвать непосредственно из класса, но не через экземпляры класса. Однако статические переменные сильно отличаются от других членов и не конфликтуют с тем же именем переменной в программе Python.

Давайте рассмотрим программу, демонстрирующую использование статических переменных в Python.

class Employee: # create Employee class name dept = 'Information technology' # define class variable def __init__(self, name, id): self.name = name # instance variable self.id = id # instance variable # Define the objects of Employee class emp1 = Employee('John', 'E101') emp2 = Employee('Marcus', 'E105') print(emp1.dept) print(emp2.dept) print(emp1.name) print(emp2.name) print(emp1.id) print(emp2.id) # Access class variable using the class name print(Employee.dept) # print the department # change the department of particular instance emp1.dept = 'Networking' print(emp1.dept) print(emp2.dept) # change the department for all instances of the class Employee.dept = 'Database Administration' print(emp1.dept) print(emp2.dept)
Information technology Information technology John Marcus E101 E105 Information technology Networking Information technology Networking Database Administration

В приведенном выше примере dept – это переменная класса, определенная вне методов класса и внутри определения класса. Где имя и идентификатор – это переменная экземпляра, определенная внутри метода.

Читайте также:  Html больше чем body

Доступ к статической переменной с использованием того же объекта класса

Мы можем напрямую обращаться к статической переменной в Python, используя тот же объект класса с оператором точки.

Давайте рассмотрим программу для доступа к статической переменной в Python с использованием того же объекта класса.

class Car: # define the class variable or static variable of class Car num = 7 msg = 'This is a good Car.' # create the object of the class obj = Car() # Access a static variable num using the class name with a dot operator. print("Lucky No.", Car.num) print(Car.msg)
Lucky No. 7 This is a good Car

Статический метод

Python имеет статический метод, принадлежащий классу. Это похоже на статическую переменную, которая привязана к классу, а не к объекту класса. Статический метод можно вызвать без создания объекта для класса.

Это означает, что мы можем напрямую вызвать статический метод со ссылкой на имя класса. Более того, статический метод ограничен классом; следовательно, он не может изменить состояние объекта.

Особенности статических методов

Ниже приведены особенности статического метода:

  1. Статический метод в Python связан с классом.
  2. Его можно вызвать непосредственно из класса по ссылке на имя класса.
  3. Он не может получить доступ к атрибутам класса в программе Python.
  4. Привязан только к классу. Таким образом, он не может изменить состояние объекта.
  5. Он также используется для разделения служебных методов для класса.
  6. Может быть определен только внутри класса, но не для объектов класса.
  7. Все объекты класса используют только одну копию статического метода.

Есть два способа определить статический метод в Python:

Использование метода staticmethod()

Staticmethod() – это встроенная функция в Python, которая используется для возврата заданной функции как статического метода.

Staticmethod() принимает единственный параметр. Где переданный параметр – это функция, которую необходимо преобразовать в статический метод.

Давайте рассмотрим программу для создания функции как статического метода с использованием staticmethod() в Python.

class Marks: def Math_num(a, b): # define the static Math_num() function return a + b def Sci_num(a, b): # define the static Sci_num() function return a +b def Eng_num(a, b): # define the static Eng_num() function return a +b # create Math_num as static method Marks.Math_num = staticmethod(Marks.Math_num) # print the total marks in Maths print(" Total Marks in Maths" , Marks.Math_num(64, 28)) # create Sci_num as static method Marks.Sci_num = staticmethod(Marks.Sci_num) # print the total marks in Science print(" Total Marks in Science" , Marks.Sci_num(70, 25)) # create Eng_num as static method Marks.Eng_num = staticmethod(Marks.Eng_num) # print the total marks in English print(" Total Marks in English" , Marks.Eng_num(65, 30))
Total Marks in Maths 92 Total Marks in Science 95 Total Marks in English 95

В приведенной выше программе мы объявили метод Math_num, метод Sci_num и метод Eng_num как статический метод вне класса с помощью функции staticmethod(). После этого мы можем вызвать статический метод напрямую, используя имя класса Marks.

Использование декоратора @staticmethod

@Staticmethod – это встроенный декоратор, который определяет статический метод внутри класса. Он не получает никаких аргументов в качестве ссылки на экземпляр класса или класс, вызывающий сам статический метод.

class Abc: @staticmethod def function_name(arg1, arg2, ?): # Statement to be executed Returns: a static method for function function_name

Примечание. @Staticmethod – это современный подход к определению метода как статического, и большая часть программистов использует этот подход в программировании на Python.

Давайте создадим программу для определения статического метода с помощью декоратора @staticmethod в Python.

class Marks: @staticmethod def Math_num(a, b): # define the static Math_num() function return a + b @staticmethod def Sci_num(a, b): # define the static Sci_num() function return a +b @staticmethod def Eng_num(a, b): # define the static Eng_num() function return a +b # print the total marks in Maths print(" Total Marks in Maths" , Marks.Math_num(64, 28)) # print the total marks in Science print(" Total Marks in Science" , Marks.Sci_num(70, 25)) # print the total marks in English print(" Total Marks in English" , Marks.Eng_num(65, 30))
Total Marks in Maths 92 Total Marks in Science 95 Total Marks in English 95

Доступ к статическому методу с использованием того же объекта класса

Рассмотрим программу для доступа к статическому методу класса с помощью @staticmethod в Python.

class Test: # define a static method using the @staticmethod decorator in Python. @staticmethod def beg(): print("Welcome to the World!! ") # create an object of the class Test obj = Test() # call the static method obj.beg()

Функция возвращает значение с помощью статического метода

Напишем программу для возврата значения с помощью метода @static в Python.

class Person: @staticmethod def Age (age): if (age 
The person is not eligible to vote.

Источник

Статический метод Python

Статический метод в Python — это метод, который связан с классом, а не с его экземплярами. Чтобы быть вызванным, он не требует создания экземпляра класса и не имеет доступа к экземпляру. Статические методы в Python объявляются с использованием декоратора @staticmethod . Этот декоратор указывает интерпретатору Python, что метод является статическим, и следует вызывать его через класс, а не через экземпляр класса.

Таким образом, статические методы в Python могут использоваться для выполнения операций, не требующих доступа к экземпляру класса или его атрибутам, то есть, по сути, они являются вспомогательными функциями. Чтобы было понятнее, о чём речь, перейдем сразу к практике.

Пример №1

Представим, что у нас есть класс MathUtils , который содержит статический метод для вычисления факториала:

class MathUtils: 
@staticmethod
def factorial(n):
if n == 0:
return 1
else:
return n * MathUtils.factorial(n-1)
print(MathUtils.factorial(5))
120

Получили факториал 5, то есть 120. Здесь статический метод factorial не использует никакие атрибуты экземпляра класса, а только входной аргумент n . И мы вызвали его, используя синтаксис MathUtils.factorial(n) и не создавая экземпляр класса MathUtils .

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

Пример №2

Допустим, у нас есть модуль StringUtils , содержащий статический метод для проверки, является ли строка палиндромом. Пишем такой код:

def is_palindrome(string): 
return string == string[::-1]

Здесь функция is_palindrome не связана с каким-либо экземпляром класса или объектом модуля, поэтому мы можем использовать декоратор @staticmethod для объявления ее как статической. Для этого расширим наш код таким образом:

class StringUtils: 
@staticmethod
def is_palindrome(string):
return string == string[::-1]

Далее введем для проверки:

print(StringUtils.is_palindrome("топот"))
True
print(StringUtils.is_palindrome("топор"))
False

Всё верно, первое слово является палиндромом, поэтому интерпретатор вывел True , а второе нет, и мы получили False .

Таким образом, мы можем вызвать метод is_palindrome через класс StringUtils , используя синтаксис StringUtils.is_palindrome(string) вместо того, чтобы импортировать функцию is_palindrome и вызывать ее напрямую.

Еще одно важное отличие статических методов от методов экземпляров класса в Python заключается в том, что статические методы не могут изменять состояние экземпляра. Это означает, что они не могут изменять значения атрибутов, что логично, так как они не имеют доступа к экземпляру. Если вы хотите изменить состояние экземпляра класса, вам нужно использовать методы экземпляров.

Пример №3

Рассмотрим еще один пример. Допустим, у нас есть класс Person , имеющий атрибут age и статический метод is_adult , проверяющий значение на соответствие возрасту совершеннолетия:

class Person: 
def __init__(self, age):
self.age = age

@staticmethod
def is_adult(age):
return age >= 18

Далее давайте создадим переменную age со значением 21, вызовем статический метод is_adult из класса Person с этим значением и сохраним его результат в переменную is_adult , вот так:

age = 21
is_adult = Person.is_adult(age)

Теперь для проверки давайте введем:

Поскольку возраст соответствует заданному в статическом методе условию, мы получили True . В примере выше статический метод is_adult принимает аргумент age , но не имеет доступа к атрибуту age экземпляра класса Person , выступая в качестве вспомогательной функции.

Подведем итоги

В завершение отметим, что статические методы улучшают читабельность кода и дают возможность повторно использовать его. А еще они удобнее, если сравнивать их со стандартными функциями Python. Удобство статических методов в том, что они не требуют отдельного импорта, как это нужно делать для функций. Таким образом, использование статических методов класса Python может существенно упростить код и работу с ним. И, как вы наверняка убедились на примерах выше, освоить их довольно просто.

Источник

Оцените статью