Метод - это функция, которая принимает экземпляр класса в качестве первого параметра. Методы являются членами классов.
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
, но это уже другая тема.