метод python как аргумент

Поэтому я знаю, что в python все является «объектом», что означает, что его можно передать как аргумент метода. Но я пытаюсь понять, как именно это работает. Поэтому я попробовал следующий пример:

class A: def __init__(self): self.value = 'a' def my_method(self) print self.value class B: def __init__(self): self.values = 'b' def my_method(self, method): method() a = A() b = B() b.my_method(a.my_method) 

Теперь сначала это было написано, чтобы посмотреть, как все работает. Я знаю, что я должен, например, проверить, является ли аргумент my_method вызываемым. Теперь мой вопрос:

Как именно этот метод прошел здесь? Я имею в виду вывод, который я получаю, это «а», поэтому я предполагаю, что когда объектный метод передается как параметр, так что это фактический объект? В этом случае, когда я a.my_method метод a.my_method также передается экземпляр a ?

4 Solutions collect form web for “метод python как аргумент”

Когда вы a.my_method к a.my_method Python видит, что он является атрибутом класса и что у A.my_method есть метод __get__() поэтому он вызывает A.my_method.__get__(a) , этот метод создает новый объект («связанный метод» '), который содержит как ссылку на A.my_method и ссылку на себя. Когда вы вызываете метод bound, он передает вызов обратно базовому методу.

Это происходит каждый раз, когда вы вызываете какой-либо метод, вызываете ли вы его напрямую или, как и в коде, задерживаете фактический вызов до более позднего времени. Вы можете найти более подробное описание протокола дескриптора, как известно в http://docs.python.org/reference/datamodel.html#descriptors

Как именно этот метод прошел здесь?

На это легко ответить: в Python все это объект 🙂 Также функции / методы, которые являются конкретными объектами функции, которые могут передаваться как параметры.

В этом случае, когда я передаю метод my_method, также передается экземпляр a?

Да, в этом случае экземпляр a также передается, хотя встроен в объект функции и не может быть восстановлен. Напротив, вы можете передать эту функцию и предоставить ей экземпляр. Рассмотрим следующий пример:

 b = B() func = A.my_method # Attention, UPPERCASE A func(b) 

Это вызовет метод классов A my_method с экземпляром B

Функции – это «первоклассные объекты» в Python. Это означает, что функция представляет собой объект, а также список или целое число. Когда вы определяете функцию, вы фактически привязываете объект функции к имени, которое вы используете в def.

Функции могут быть привязаны к другим именам или переданы в качестве параметров для функций (или сохранены в списках или …).

источник: http://mail.python.org/pipermail/tutor/2005-October/042616.html

a.my_method возвращает не точно функцию, определенную вами в class A (вы можете получить ее через A.my_method ), но объект, называемый «связанным методом», который содержит как исходную функцию (или «несвязанный метод» в Python 2, IIRC ) и объект, из которого он был извлечен (аргумент self ).

  • Возможно ли разбить длинную строку на несколько строк в Python
  • Получить координаты местоположения с помощью bing или google API в python
  • Что такое «мягкий лимит частной памяти» в GAE?
  • python - умножить и добавить каждый элемент в списке a со списком b
  • Использование файла cookies.txt с запросами Python
  • Что означает (многоточие) в списке в Python?
  • PIL не найден
  • Отслеживание в Google Analytics с помощью python
  • Постоянное хеширование строк в Python
  • «Функция ________ при 0x01D57aF0» возвращает в python
  • TypeError: объект 'module' не может быть вызван для объекта python
  •  
    Interesting Posts for Van-Lav

    Доступ к атрибутам по int литералам

    Фильтр высоких частот Python

    setup.py – Symlink-модуль в / usr / bin после установки

    отсутствует модуль python bz2

    Как нарезать деку?

    Проблемы с datetime в Django (по умолчанию = datetime.now ())

    Расширение wagtail Streamfields в унаследованном классе

    Как импортировать модуль из родительского каталога? (unittest целей)

    группировка неизвестного числа аргументов с помощью argparse

    Показать прогресс в исполнении скрипта python с помощью nodejs

    Кажется, что Pandas игнорирует имя первого столбца при чтении данных с разделителями-табуляторами, дает KeyError

    Как синхронизировать базы данных MySQL между двумя удаленными базами данных (без технологии репликации базы данных MySQL)

    Как я могу установить библиотеку boto на windows для python?

    Повторная выборка кадра данных в пандах в качестве операции проверки

    Формула Хаверсина в Python (Подшипник и расстояние между двумя точками GPS)

    Python - лучший язык программирования в мире.