Погружение в нюансы методов классов и экземпляров: Beyond Self vs. Cls
Предложение по расширению Python (PEP) 8 предлагает использовать «self» в качестве первого аргумента в методах экземпляра и «cls» в качестве первого аргумента в методах класса. Это различие обусловлено различной ролью, которую эти методы играют при работе с экземплярами и классами.
Методы экземпляра: собственное преимущество
Методы экземпляра вызываются в экземплярах сорт. Обычно они взаимодействуют с конкретными атрибутами и поведением этого конкретного экземпляра. Первым параметром этих методов является self, который представляет экземпляр, в котором вызывается метод.
Например, следующий класс определяет метод экземпляра «представить»:
class Inst:
def __init__(self, name):
self.name = name
def introduce(self):
print("Hello, I am %s, and my name is %s" % (self, self.name))
Когда мы создаем экземпляр класса Inst и вызываем его метод "introduce", Сам экземпляр передается как параметр self, что позволяет нам получить доступ к его атрибутам (в данном случае атрибуту "name").
Методы класса: использование Cls
С другой стороны, методы класса работают с самим классом, а не с отдельными экземплярами. Они позволяют нам изменять или проверять структуру или поведение класса. Первый параметр этих методов — cls, который представляет класс, в котором вызывается метод.
Следующий пример иллюстрирует метод класса:
class Cls:
@classmethod
def introduce(cls):
print("Hello, I am %s!" % cls)
Этому методу не требуется экземпляр, поскольку он не взаимодействует с конкретными атрибутами объекта. Вместо этого он работает с самим классом, предоставляя информацию о его структуре.
Методы класса особенно полезны при наследовании от родительского класса, поскольку они позволяют дочернему классу изменять или расширять поведение родительского класса. Например, следующий подкласс переопределяет метод «introduce» класса Cls:
class SubCls(Cls):
pass
SubCls.introduce()
# outputs: Hello, I am
Используя «cls» в качестве первого параметра, метод «introduce» можно вызвать непосредственно в подклассе, что позволяет ему определять свое собственное поведение при по-прежнему имеет доступ к свойствам, унаследованным от родительского класса.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3