«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Чем функции, несвязанные и связанные методы различаются в системе разрешения методов Python?

Чем функции, несвязанные и связанные методы различаются в системе разрешения методов Python?

Опубликовано 10 ноября 2024 г.
Просматривать:106

How do Functions, Unbound Methods, and Bound Methods Differ in Python\'s Method Resolution System?

Раскрытие природы функций, несвязанных и связанных методов

Концепция классов и методов является фундаментальной для парадигм объектно-ориентированного программирования . Понимание нюансов и взаимосвязей между функциями, несвязанными и связанными методами имеет решающее значение для освоения тонкостей системы разрешения методов Python.

Определение сущностей

  • Функции: Созданные с помощью оператора def, функции представляют собой автономные единицы кода без прямой связи с каким-либо классом.
  • Несвязанные методы: Когда функция становится частью класса определению, он преобразуется в несвязанный метод. Этот переход происходит автоматически в Python 2, но устарел в Python 3.
  • Привязанные методы: Создаваемые путем доступа к методу экземпляра класса, привязанные методы неявно получают экземпляр в качестве своего первого параметра ( self).

Преобразования и доступность

  • От функции к несвязанному методу: Использование типов.MethodType или доступ к функции внутри тело класса фактически преобразует его в несвязанный метод.
  • Несвязанный метод в связанный метод: Доступ к несвязанному методу в экземпляре класса приводит к созданию связанного метода.
  • Функция для связанного метода: Аналогично предыдущему шагу, доступ к функции в экземпляре класса напрямую генерирует связанный метод.

Ключевые различия

  • Узнаваемость о классе: Непривязанный метод несет информацию о классе, к которому он принадлежит, в то время как функции и связанные методы лишены этой осведомленности.
  • Экземплярный доступ: В отличие от несвязанных методов, для выполнения которых требуется экземпляр, функции и связанные методы можно вызывать напрямую.

Эквивалентность и использование

В обоих Python 2 и Python 3, следующие выражения функционально эквивалентны:

f1(C())
C.f1(C())
C().f1()

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

lambda *args, **kwargs: f1(C(), *args, **kwargs)
functools.partial(f1, C())

От несвязанного к связанному

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

Заключение

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

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3