Python Glossary English

все Python 3typesпонятие

types.MethodType

типы функций

Тип связанного метода: функция, к которой уже привязан экземпляр как self. Через types.MethodType(func, obj) метод можно привязать к объекту вручную.

Синтаксис

types.MethodType(function, instance)

obj.method и Class.method — разные вещи: у класса лежит обычная функция (FunctionType), а при обращении через экземпляр каждый раз создаётся новый связанный метод, поэтому obj.m is obj.m даёт False — сравнивайте через ==. Функцию, просто присвоенную атрибуту экземпляра (obj.f = func), Python не свяжет: self не подставится, и вызов упадёт с TypeError. Для этого и нужен types.MethodType(func, obj). Связанный метод держит сильную ссылку на obj — отсюда weakref.WeakMethod.

Примеры

import types
class Dog:
    def bark(self):
        return 'woof'
d = Dog()
print(type(Dog.bark).__name__, type(d.bark).__name__)  # → function method
print(d.bark is d.bark, d.bark == d.bark)  # → False True
import types
class Dog:
    name = 'Rex'
def intro(self):
    return 'I am ' + self.name
d = Dog()
d.intro = types.MethodType(intro, d)
print(d.intro())  # → I am Rex

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности