Внутри вашего create_function
, def foo()
связывается с переменной name
.При вызове функции будет получено значение current , равное name
.Существует только одна переменная name
, поэтому все ваши функции foo
связаны с одной и той же переменной.
Если вы действительно хотите это сделать, вы должны убедиться, что к каждой функции привязана отдельная переменная.Вытяните все тело вашего for
цикла в отдельную функцию, затем он создаст разные переменные для каждой функции.
def create_functions():
for x in function_name_list:
create_foo(x.replace('/', ''))
def create_foo(name):
@add_method(A, name)
def foo(value):
with open('./file' + str(name) + '.txt', 'a') as f:
f.write(str(time.time()) + ',' + name + ',' + str(value) + "\n")
print('Call: ', name)
(copy.deepcopy()
на str
вернет исходный str
поэтому я удалил его.)
Гораздо более простой метод - просто связать аргументы, используя functools.partial
:
import functools
def foo(self, value, name):
with open('./file' + str(name) + '.txt', 'a') as f:
f.write(str(time.time()) + ',' + name + ',' + str(value) + "\n")
print('Call: ', name)
def create_functions():
for x in function_name_list:
name = x.replace('/', ''))
setattr(A, name, functools.partial(foo, name=name))