Я занимаюсь разработкой класса агента для эволюционного алгоритма.Мне нужно добавить метод, который генерируется из строки, унаследованной от родителей.Вот минимальный пример
class Agent:
def __init__(self, s='\tif x > y:\n\t\treturn 1'):
self.f_template = f'def f(self, x,y):\n{s}'
Я хотел бы иметь метод self.f(self, x,y)
с self.f_template
в качестве тела функции.Я знаю, что мог бы добавить это позже, выполнив:
A = Agent()
exec(A.f_template)
A.f = partial(f, A)
>>> A.f(3,2)
1
Но возможно ли добиться того же во время __init__()
, а не после?
Простое выполнение следующих рейзов NameError: name 'f' is not defined
class Agent:
def __init__(self, s='\tif x > y:\n\t\treturn 1'):
self.f_template = f'def f(self, x,y):\n{s}'
exec(self.f_template)
self.f = partial(f, self)