Метод - это функция, которая принимает экземпляр класса как свой первый параметр. Методы являются членами классов.
class C:
def method(self, possibly, other, arguments):
pass # do something here
Как вы хотели знать, что конкретно это означает в Python, можно различать связанные и несвязанные методы. В Python все функции (и как таковые также методы) являются объектами, которые можно передавать и «играть с». Таким образом, разница между несвязанными и связанными методами:
1) Связанные методами
# Create an instance of C and call method()
instance = C()
print instance.method # prints '<bound method C.method of <__main__.C instance at 0x00FC50F8>>'
instance.method(1, 2, 3) # normal method call
f = instance.method
f(1, 2, 3) # method call without using the variable 'instance' explicitly
Связанные методами являются методами, которые принадлежат экземплярам класса. В этом примере instance.method
связан с экземпляром instance
. Каждый раз, когда этот связанный метод вызывается, экземпляр автоматически передается в качестве первого параметра - который называется конвенцией по умолчанию self
.
2) несвязанные методы
print C.method # prints '<unbound method C.method>'
instance = C()
C.method(instance, 1, 2, 3) # this call is the same as...
f = C.method
f(instance, 1, 2, 3) # ..this one...
instance.method(1, 2, 3) # and the same as calling the bound method as you would usually do
При доступе C.method
(метод внутри класса, а не внутри экземпляра), вы получите несвязанный метод. Если вы хотите его вызвать, вам нужно передать экземпляр как первый параметр, потому что метод не связан с любым экземпляром.
Зная эту разницу, вы можете использовать функции/методы как объекты, например, методы передачи. В качестве примера используйте случай, представьте API, который позволяет определить функцию обратного вызова, но вы хотите предоставить метод в качестве функции обратного вызова. Нет проблем, просто передайте self.myCallbackMethod
в качестве обратного вызова, и он будет автоматически вызван с экземпляром в качестве первого аргумента. Это было бы невозможно в статических языках, таких как C++ (или только с обманом).
Надеюсь, у вас есть смысл;) Я думаю, что это все, что вам нужно знать об основах метода. Вы также можете прочитать о декораторах classmethod
и staticmethod
, но это еще одна тема.
"много учебных пособий Python"? О каких конкретных учебниках вы говорите? Мы не можем рекомендовать другую, если мы не знаем, что вы сейчас читаете. –
Метод - это общий термин, он не имеет никакого значения в Python, вероятно, поэтому он используется так беззаботно. См. Http://en.wikipedia.org/wiki/Method_(computer_science) –
@ S.Lott: Извините, пожалуй, я был слишком абсолютистским, передавая свое мнение относительно учебников Python. – brilliant