Próbuję zaimplementować coś w rodzaju dynamicznych wyszukiwaczy Rails w Pythonie (dla webapp/GAE). Dynamiczne wyszukiwania działają w ten sposób:Dynamic Finders and Method Missing in Python
- Twoja osoba ma kilka pól: imię i nazwisko, wiek i adres e-mail.
- Załóżmy, że chcesz znaleźć wszystkich użytkowników o nazwie "Robot".
Klasa Person ma metodę zwaną „find_by_name”, który otrzymuje nazwę i zwraca wynik zapytania:
@classmethod
def find_by_name(cls, name):
return Person.gql("WHERE name = :1", name).get()
Zamiast napisać metodę tak dla każdego atrybutu, ja "chciałbym, aby coś takiego jak Ruby's method_missing, która pozwala mi to zrobić.
tej pory widziałem te posty 2 blogu: http://blog.iffy.us/?p=43 i http://www.whatspop.com/blog/2008/08/method-missing-in-python.cfm ale ja bym lubią słuchać, co jest „najbardziej jest właściwa” sposób to zrobić.
Próbowałem użyć tego kodu, ale nadal otrzymuję: 'AttributeError (" typ obiektu 'FindableModel' nie ma atrybutu "find_by_name" ",)'. Czy możesz wyjaśnić nieco więcej, jak tego użyć? – hakunin
@hakunin Jak się go używa? Powinieneś uczynić tę klasę nadrzędną swojego modelu. –
Oto model, którego używam: https://gist.github.com/2014164 Chciałbym użyć '__getattr__', ale po prostu nie zostanie on wywołany z jakiegoś powodu. – hakunin