Разница между использованием свойств или обработчиков признаков для установки зависимой переменной - PullRequest
3 голосов
/ 01 апреля 2012

В чертах Python EPD я могу сохранять переменные, которые зависят от других, в актуальном состоянии либо со свойством, либо с действиями в методе, который заботится об изменениях переменной 'master'.

Я показываю здесь оба способа, сначала со свойством:

from traits.api import HasTraits, Int, Property
class MyClass(HasTraits):
    val = Int
    dependent = Property(depends_on = 'val')

    def _get_dependent(self):
        return 4*self.val

и теперь с обработчиком черт:

from traits.api import HasTraits, Int
class MyClass(HasTraits):
    val = Int
    dependent = Int

    def _val_changed(self):
        self.dependent = 4*self.val

Мой вопрос: когда я должен использовать что? Исследуя это, я понял, что одно из отличий состоит в том, что в случае использования свойства «зависимая» переменная становится доступной только для чтения, если она установлена ​​как здесь. Но скажем, зависимый действительно действительно зависимый, и у меня никогда не было достаточно знаний, чтобы установить его напрямую, есть ли еще разница, о которой я должен знать?

Редактировать: Это похоже на мой вопрос, связанный с другими чертами , но не имеет прямого отношения.

1 Ответ

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

В этом случае я бы определенно использовал свойство, потому что dependent фактически не содержит какого-либо полезного состояния, которое вам нужно сохранить, вам просто нужно получить к нему доступ.

Второй вариант также может легко взорватьсяв ваше лицо в некоторых случаях.Представьте, что у вас гораздо больше зависимостей, и вам нужно будет добавить больше в будущем.Каждый раз, когда вы добавляете нового участника в зависимости от val, вам нужно перейти на _val_changed и сообщить об этом новому члену.С другой стороны, если вы создаете своего нового члена в качестве свойства со значением val, оно отделено от остальных, и вы больше не путаете свой код каждый раз, когда добавляете зависимость.

...