Как взять имя переменной с математическим знаком в качестве ввода в Python? - PullRequest
0 голосов
/ 01 апреля 2012

при чтении API Python ndb google app engine я пересекаю эту строку.

Guestbook.query().order(-Guestbook.post_date)

Гостевая книга - это класс сущностей, а post_date - это класс свойств.

Но как порядокфункция может принять это как вход?это не значение его имени, а точнее его определения класса.

Как определить функцию для такого ввода?

1 Ответ

4 голосов
/ 01 апреля 2012

Guestbook.post_date - это экземпляр класса, который реализует метод __neg__ для возврата объекта, который сообщит API базы данных о порядке убывания по этому столбцу.

Вот небольшой пример того, как это работает (очевидно, реальный класс намного сложнее):

class SqlOrder(object):
    def __init__(self, column, order='ASC'):
        self.column = column
        self.order = order
    def __neg__(self):
        return SqlOrder(self.column, 'DESC')
    def __str__(self):
        return '%s %s' % (self.column, self.order)

>>> foo = SqlOrder('foo')
>>> str(foo)
'foo ASC'
>>> str(-foo)
'foo DESC'
...