Sto cercando di implementare qualcosa come i finder dinamici di Rails in Python (per la webapp/GAE ). I rilevatori dinamici funzionano in questo modo:Finder dinamici e metodo mancanti in Python
- La persona ha alcuni campi: nome, età e indirizzo email.
- Supponiamo di voler trovare tutti gli utenti il cui nome è "Robot".
La classe Persona ha un metodo chiamato "find_by_name" che riceve il nome e restituisce il risultato della query:
@classmethod
def find_by_name(cls, name):
return Person.gql("WHERE name = :1", name).get()
Invece di dover scrivere un metodo del genere per ogni attributo, io Mi piacerebbe avere qualcosa come il metodo_missing di Ruby che mi permette di farlo.
Finora ho visto questi posti 2 del blog: http://blog.iffy.us/?p=43 e http://www.whatspop.com/blog/2008/08/method-missing-in-python.cfm ma mi piacerebbe piace sentire qual è il modo "più appropriata" di farlo.
Ho provato a usare questo codice ma ottengo ancora: 'AttributeError (" tipo oggetto 'FindableModel' non ha attributo 'find_by_name' ",)'. Puoi spiegare un po 'di più come usare questo? – hakunin
@hakunin Come lo stai usando? Dovresti fare di questo la classe genitrice del tuo modello. –
Ecco il modello che uso: https://gist.github.com/2014164 Mi piacerebbe usare '__getattr__' ma non viene chiamato per qualche motivo. – hakunin