我正在尝试使用混合值对象构建custom comparators的文档中的示例
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"
这是为了什么?
答案 0 :(得分: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(),那么会将其更改为其他内容。我不知道在那里完全是必要的。