Страницы

Поиск по вопросам

четверг, 7 марта 2019 г.

Динамическое добавление методов к объекту в Python 3

Допустим у меня есть класс
class A: x, y = 1, 2
и объект для этого класса
a = A()
Как добавить к a новый метод?
Если сделать так
a.f = lambda self: self.x + self.y print(a.f())
то получаю ошибку
Traceback (most recent call last): File "python", line 8, in TypeError: () missing 1 required positional argument: 'self'
А если так
a.f = lambda: "body"
то внутри лямбда функции у меня нет доступа к объекту.


Ответ

https://stackoverflow.com/questions/972/adding-a-method-to-an-existing-object-instance
import types
class A: x, y = 1, 2
a = A() a.f = types.MethodType(lambda self: self.x + self.y, a) a.f() # --> 3
Разница в следующем:
a.g = lambda self: self.x + self.y a.f # --> of <__main__.A object at 0x7f4de50d5978>> a.g # --> at 0x7f4de51babf8>
Но:
>>> A.h = lambda self: self.x + self.y >>> a.h() 3

Комментариев нет:

Отправить комментарий