2011-07-21 3 views
3

SQLAlchemyの:これが追加された理由のハイブリッド値オブジェクトは、クエリのタプルは、しかし、私はハイブリッド値オブジェクトを使用して<a href="http://www.sqlalchemy.org/docs/orm/extensions/hybrid.html#hybrid-value-objects" rel="nofollow">custom comparators</a>を構築する上でのドキュメントの例に従うことをしようとしています

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" 

私は理解していない結果クラス定義の終わり:

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

これはどのようなものですか?

答えて

3

完全に焼いたPythonのフィーチャーではありませんが、関数やメソッドと同じ方法で、つまり属性の下に文字列を置くことで、属性をコメントするのが一般的です。上記のようなコメントは、Sphinxのようなツールによって取り上げられます。 http://www.sqlalchemy.org/docs/orm/mapper_config.html#sqlalchemy.orm.mapper.Mapper.class_managerのような場所で生成されるこれらのドキュメントストリングの例を見ることができます。

編集:ああ、なぜ実際の ".key"があるのですか?あなたが言うとき:

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

"word"と "someotherword"タプルキーは各コンパレータの ".key"の値です。もしあなたがlabel()を呼び出すなら、それは他のものに変更されます。私は全くそこにいることが厳密に必要であるとは知らない。

+0

私はまた興味がありますが、属性そのもののポイントは何ですか?キー? – john

関連する問題

 関連する問題