Радость Python
Это правда в некоторой степени.Методы связаны с экземпляром объекта, частью которого они являются.Когда вы видите
def some_func(self, foo, bar)
Передача "я" иногда подразумевается при вызове, например:
obj.some_func(foo_val, bar_val)
Что равно (при условии obj
класса MyClass
)
MyClass.some_func(obj, foo_val, bar_val)
Поскольку метод связан с obj
, аргумент self
получаетнаселен.Это часть Python, которая ясно показывает, что это значит.В других языках this
просто входит в область видимости, в Python есть некоторое представление о том, как это происходит.
Вы также можете передавать методы и передавать их вручную self
, когда не вызываете из связанного контекста.
Документы Python делают хорошую работу :
xf = x.f
while True:
print xf()
продолжит печатать привет мир до конца времени.
* 1041Что именно происходит при вызове метода?Возможно, вы заметили, что xf () был вызван> без аргумента выше, хотя в определении функции для f () указан аргумент>.Что случилось с аргументом?Конечно, Python вызывает исключение, когда функция>, которая требует аргумент, вызывается без такового - даже если аргумент фактически не> используется ...
На самом деле, вы, возможно, догадались, что ответ: особая вещь оМетоды таковы, что> объект передается в качестве первого аргумента функции.В нашем примере вызов xf ()> точно эквивалентен MyClass.f (x).В общем, вызов метода со списком из n аргументов> эквивалентен вызову соответствующей функции со списком аргументов, который создается> путем вставки объекта метода перед первым аргументом.