Я пытаюсь написать уровень абстракции базы данных на 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'}
Я ошибаюсь? Есть ли лучший способ узнать имя вызываемой функции или каким-то образом сделать «бумажную копию» функции?