Метод - це функція, яка приймає екземпляр класу як перший параметр. Методи є членами класів.
class C:
def method(self, possibly, other, arguments):
pass
Оскільки ви хотіли знати, що це конкретно означає в Python, можна розрізнити зв’язані та незв’язані методи. У Python усі функції (і як такі також методи) є об'єктами, які можна передавати та "грати з ними". Тож різниця між незв’язаними та зв’язаними методами полягає в:
1) Фіксовані методи
instance = C()
print instance.method
instance.method(1, 2, 3)
f = instance.method
f(1, 2, 3)
Зв’язані методи - це методи, що належать до екземплярів класу. У цьому прикладі instance.method
прив'язується до екземпляра, що викликається instance
. Щоразу, коли викликається цей зв’язаний метод, екземпляр передається як перший параметр автоматично - що викликається self
за домовленістю.
2) Незв’язані методи
print C.method
instance = C()
C.method(instance, 1, 2, 3)
f = C.method
f(instance, 1, 2, 3)
instance.method(1, 2, 3)
Коли ви отримуєте доступ C.method
(метод всередині класу, а не всередині екземпляра), ви отримуєте незв'язаний метод. Якщо ви хочете викликати його, вам потрібно передати екземпляр як перший параметр, оскільки метод не є прив'язаний до жодного екземпляра.
Знаючи цю різницю, ви можете використовувати функції / методи як об'єкти, наприклад, передавати методи навколо. Як приклад використання, уявіть API, який дозволяє визначити функцію зворотного виклику, але ви хочете надати метод як функцію зворотного виклику. Немає проблем, просто передайте self.myCallbackMethod
як зворотний виклик, і він буде автоматично викликаний з екземпляром як перший аргумент. Це неможливо в статичних мовах, таких як C ++ (або лише при обманах).
Сподіваюся, ви зрозуміли суть;) Я думаю, що це все, що ви повинні знати про основи методів. Ви також можете прочитати більше про декоратори classmethod
та staticmethod
декоратори, але це вже інша тема.