2011-07-21 3 views
3

Je suis en train de suivre les exemples de la documentation sur la construction custom comparators en utilisant des objets de valeur hybrides,SQLAlchemy: hybride Valeur objet, Requête Tuple Résultats

class CaseInsensitiveWord(Comparator): 
    "Hybrid value representing a lower case representation of a word." 

    def __init__(self, word): 
     if isinstance(word, basestring): 
      self.word = word.lower() 
     elif isinstance(word, CaseInsensitiveWord): 
      self.word = word.word 
     else: 
      self.word = func.lower(word) 

    def operate(self, op, other): 
     if not isinstance(other, CaseInsensitiveWord): 
      other = CaseInsensitiveWord(other) 
     return op(self.word, other.word) 

    def __clause_element__(self): 
     return self.word 

    def __str__(self): 
     return self.word 

    key = 'word' 
    "Label to apply to Query tuple results" 

Cependant, je ne comprends pas, pourquoi il a été ajouté à la fin de la définition de la classe:

key = 'word' 
"Label to apply to Query tuple results" 

Qu'est-ce que cela?

Répondre

3

Bien qu'il ne s'agisse pas d'une fonctionnalité Python entièrement cuite, une convention consiste à commenter des attributs de la même manière que des fonctions et des méthodes, c'est-à-dire en plaçant une chaîne sous l'attribut. Des commentaires comme ceux-ci sont repris par des outils comme Sphinx. Vous pouvez voir des exemples de ces docstrings générés dans des endroits comme http://www.sqlalchemy.org/docs/orm/mapper_config.html#sqlalchemy.orm.mapper.Mapper.class_manager.

edit: oh pourquoi il a un ".key" réel. Quand vous dites:

for row in session.query(MyClass.mycustomthing, MyClass.myothercustomthing): 
    print row.word, row.someotherword 

les touches tuple « mot » et « someotherword » sont la valeur de « .key » sur chaque comparateur. Si vous appeliez label(), cela changerait quelque chose d'autre. Je ne sais pas s'il est strictement nécessaire d'être là du tout.

+0

Merci, mais je suis aussi curieux, quel est le point de l'attribut lui-même? Clé? – john

Questions connexes