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

Как связать несвязанные методы в Python, не вызывая их?

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

How to Bind Unbound Methods in Python Without Calling Them?

Привязка несвязанных методов: Pythonic подход

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

Как упоминалось во вводном абзаце, использование functools.partial может обеспечить обходной путь, но может быть более элегантное и Pythonic решение. К счастью, существует эффективный подход к связыванию несвязанных методов без их вызова.

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

Пример кода:

# Declare an unbound method
def some_method(self):
    # Method implementation here

# Bind the unbound method to an instance
instance = MyClass()
bound_method = some_method.__get__(instance, MyClass)

# Continue passing around the bound method without calling it

Вывод:

Использование описанного метода get позволяет легко привязывать несвязанные методы к экземплярам, ​​сохраняя их несвязанный статус и решение проблемы, возникающей при работе с кнопками wxPython.

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

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

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

Copyright© 2022 湘ICP备2022001581号-3