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

Я пытаюсь написать уровень абстракции базы данных на Python, который позволяет вам создавать SQL-данные, используя связанные вызовы функций, такие как:

results = db.search("book")
          .author("J. K. Rowling")
          .price("<40.00")
          .title("Harry")
          .execute()

, но у меня возникают проблемы, когда я попробуйте динамически добавить необходимые методы в класс db.

Вот важные части моего кода:

import inspect

def myName():
    return inspect.stack()[1][3]

class Search():

    def __init__(self, family):
        self.family = family
        self.options = ['price', 'name', 'author', 'genre']
        #self.options is generated based on family, but this is an example
        for opt in self.options:
            self.__dict__[opt] = self.__Set__
        self.conditions = {}

    def __Set__(self, value):
        self.conditions[myName()] = value
        return self

    def execute(self):
        return self.conditions

Однако, когда я запускаю такой пример, как:

print(db.search("book").price(">4.00").execute())

output:

{'__Set__': 'harry'}

Я ошибаюсь? Есть ли лучший способ узнать имя вызываемой функции или каким-то образом сделать «бумажную копию» функции?

9
задан Yahel 27 November 2011 в 17:15
поделиться