Привязка динамического атрибута 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)
        )
Другие вопросы по тегам