Опубликован: 11.08.2024 36
В Python, как правило, существует три типа методов:
Методы экземпляра - это обычные функции, используемые при создании классов, в которых первым параметром указывается ключевое слово self
– ссылка на экземпляр класса, из которого метод был вызван.
class Student:
def __init__(self, a, b):
self.a = a
self.b = b
def avg(self):
return (self.a + self.b) / 2
s1 = Student(10, 20)
print( s1.avg() )
15.0
В приведенной примере a
и b
являются переменными экземпляра, и они инициализируются, когда мы создаем объект класса Student
. Если мы хотим вызвать функцию avg()
, которая является методом экземпляра, мы должны создать экземпляр класса s1
.
Методы класса - это функции, имеющие доступ только к переменным класса, у которых первым параметром указывается ключевое слово cls
- ссылка на класс, а не self
– ссылка на экземпляр класса.
Для создания метода класса обычно используется декоратор @classmetod
.
Например, добавим в класс Student
атрибуты класса:
name
, MIN_GRADE, MAX_GRADE и методы класса (info()
для вывода имени и validate_grade()
для проверки значений оценок студента).
class Student:
name = "Студент"
MIN_GRADE = 0
MAX_GRADE = 100
def __init__(self, a, b):
self.a = self.b = 0
if Student.validate_grade(a) and Student.validate_grade(b):
self.a = a
self.b = b
def avg(self):
return (self.a + self.b) / 2
@classmethod
def info(cls):
return cls.name
@classmethod
def validate_grade(cls, arg):
return cls.MIN_GRADE <= arg <= cls.MAX_GRADE
# для вызова метода класса используется пространство имен класса Student
print(Student.info())
Студент
Кроме того, мы можем обратиться к методу класса и внутри класса (например, в функции __init__
), используя также имя класса Student
или через ключевое слово self
(в этом случае интерпретатор Python сам подставит нужный класс в параметр cls
данного метода, так как экземпляр содержит информацию о классе, от которого был образован).
Статические методы - это самостоятельные функции, объявленные внутри класса, но не имеющие доступа ни к атрибутам класса, ни к атрибутам его экземпляров. Обычно статические методы используют для удобства в качестве сервисной функции, так как их функционал обычно связан с тематикой класса.
Для создания статического метода используется декоратор @staticmetod
. Статический метод может быть вызван без создания экземпляра класса, используя напрямую имя класса.
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
# вызов статического метода внутри класса
print(f"Радиус вектора: {Vector.norm2(self.x, self.y)}")
def get_coord(self):
return self.x, self.y
@staticmethod
def norm2(x, y):
return x*x + y*y
v1 = Vector(10, 20)
Радиус вектора: 500
# вызов статического метода извне класса
print(Vector.norm2(5, 10))
125
В приведенном примере статический метод norm2
вычисляет квадратичную норму вектора с координатами x
и y
(длину вектора в квадрате или радиус вектора).
Воспользоваться статическим методом можно как вне класса, так и внутри класса.
Что такое дескрипторы в Python?
В чем разница между статическими и динамическими атрибутами класса?
Как создать класс и объект класса в Python
Комментариев нет.