В Python мы можем с легкостью создать статичный метод. Давайте рассмотрим примеры использования self
.
Создадим класс студента, который будет принимать имя студента, а также создадим статический метод.
class Student:
def __init__(self, name):
self.name = name
@staticmethod
def static_method():
return 'static method'
Из этого статического метода мы не можем использовать объекты класса. А если мы создадим такой же метод, но с self
, мы сможем управлять объектами класса, взаимодействовать с ними на уровне функций.
Рассмотрим пример с использованием self
.
class Student:
def __init__(self, name):
self.name = name
@staticmethod
def static_method():
return print('static method')
def self_method(self):
return print(self.name)
student = Student(name='Vladislav')
student.self_method()
student.static_method()
Результат:
Vladislav
static method
Если же я захочу вывести в статическом методе self.name
, я получу ошибку следующего вида, тем самым убеждаясь, что я не могу получать доступ к экземплярам класса.
class Student:
def __init__(self, name):
self.name = name
@staticmethod
def static_method():
return print('static method', self.name)
def self_method(self):
return print(self.name)
student = Student(name='Vladislav')
student.self_method()
student.static_method()
Результат:
Vladislav
Traceback (most recent call last):
File "C:\Users\Razilator\Desktop\Courses\nth-coding\articles\self\main.py", line 16, in <module>
student.static_method()
File "C:\Users\Razilator\Desktop\Courses\nth-coding\articles\self\main.py", line 8, in static_method
return print('static method', self.name)
NameError: name 'self' is not defined
self ключевое слово?
self используется во многих местах Python, поэтому люди думают, что это ключевое слово.
Но в отличие от C++ self не является ключевым словом.
На самом деле мы можем использовать любое имя для первого параметра метода, но настоятельно рекомендуется придерживаться стандарта.
Но как пример, приведу следующий код:
class Student:
def __init__(student, name):
student.name = name
@staticmethod
def static_method():
return print('static method')
def self_method(student):
return print(student.name)
student = Student(name='Vladislav')
student.self_method()
student.static_method()
Результат будет тот же.
Vladislav
static method
Таким образом, self
является указанием явного использования экземпляров класса.