все 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Сообщить о неточности