метод 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 не работает?
  • для циклов в python
  • TypeError: объект 'int' не подлежит подписке
  • С помощью Python unittest, как мне создать и использовать «вызываемый объект, который возвращает тестовый набор»?
  • Как получить значение по определенному индексу в списке python?
  • Вызов функции Python из Go и получение возвращаемого значения функции
  • В Python каково значение круглых скобок, в изоляции, связанных с именем модуля?
  • Чтение текстового файла python
  • Python - лучший язык программирования в мире.