Привязка динамического атрибута Python к методу
Прочитав несколько постов, я все еще немного озадачен правильным способом реализации динамического атрибута класса со значением в качестве функции.
Прошло некоторое время с тех пор, как я прикоснулся к питону, и теперь я немного застрял.
У меня есть следующий класс:
class RunkeeperUser(object):
def __init__(self, master):
self.master = master
# Get the user methods and set the attributes
for user_method, call in self.master.query('user').iteritems():
# Should not get the value but bind a method
setattr(
self,
user_method,
self.master.query(call)
)
def get_user_id(self):
return self.user_id
def query(self, call):
return self.master(call)
Прямо сейчас, как вы можете видеть при установке атрибута, он непосредственно выполняет self.master.query(call), и уже есть результаты при доступе к атрибуту.
Вопрос в том, как я могу сделать это значение атрибута динамическим во время выполнения и еще не выполненным?
Я пытался:
setattr(
self,
user_method,
lambda: self.master.query(call)
)
Но это почему-то не работает. Любая помощь / руководство или лучшие руководители для достижения описанного результата?
1 ответ
Это хорошо известный гоча. Вы должны привязать текущее значение вашего аргумента в лямбду, то есть:
setattr(
self,
user_method,
lambda call=call: self.master.query(call)
)