Простой способ реализовать динамические представления? - PullRequest
1 голос
/ 28 июня 2009

Просмотр - это полезные конструкции Python 3 . Для тех, кто никогда не замечал (как я): для словаря d вы можете написать k = d.keys(), и даже если вы обновите d, переменная k все равно будет выдавать вам обновленные ключи. Тогда вы можете написать k1 & k2, и он всегда даст вам d1.keys() & d2.keys()

Я хочу реализовать это для моего персонального менеджера задач, но я хотел бы сделать сложные представления динамическими или с ленивой оценкой . То есть у меня есть некоторые представления, называемые so, post и priority, и я хочу иметь возможность написать:

    now = so | phone & priority

, чтобы позже, когда вызывается __repr__(now), оценка выполняется только в этой точке .

Моей первой мыслью было перегрузить логические операторы, поэтому я изменил View.__and__, чтобы создать новое представление, которое помнит себя как составную часть двух подпредставлений и применяет & к ним при вычислении. Но, похоже, логических операторов довольно много, поэтому я не уверен, правильно ли я поступаю.

Есть ли стандартный библиотечный класс, который бы помог мне с этим? Как я могу упростить процесс?

Ответы [ 2 ]

1 голос
/ 31 декабря 2009

Не существует "легкого" способа сделать это, особенно , если вы хотите ленивого поведения, как указано. Но все же, логических операторов не так уж и много, всего три: __and__, __or__ и __xor__.

(для дополнительной эффективности вы можете дополнительно реализовать версии на месте __iand__, __ior__ и __ixor__, но если вы этого не сделаете, обычные версии будут вызываться как запасной вариант)

1 голос
/ 02 июля 2009

Ну, есть класс collection.UserList, который определяет большинство из них, возможно, это означает, что вам не нужно переопределять все из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...