Страницы

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

воскресенье, 12 января 2020 г.

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

#python #python_3x #классы #методы


Допустим у меня есть класс

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"


то внутри лямбда функции у меня нет доступа к объекту.
    


Ответы

Ответ 1



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

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

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