Я немного новичок в Enthought traits
модуль. Я хотел бы указать признак, для которого разрешено только несколько значений с плавающей запятой. К сожалению, я не могу использовать Enum
, потому что он разбивает базу кода, над которой я работаю. Как указать, какие значения действительны для Float
? Должен ли я создавать другой класс из Float
с перегруженным validate
?Как ограничить значения в функции Float в модуле Enthought traits?
1
A
ответ
1
Да, документы traits
указывают, что вы должны подклассифицировать черту Float
и добавить свой собственный код проверки.
См. Раздел о Custom Traits. Я бы посмотрел на источник для реализации Enum
.
Спасибо! Переосмыслив это, я думаю, что подклассификация также может сломать существующий код, поэтому я просто буду игнорировать ограничения на данный момент, но я помню этот ответ. –
Не могли бы вы принять или перенести ответ, если он вам был полезен? Кроме того, мне любопытно узнать, как код сломается, если вы используете подкласс «Enum» или «Float»? Для меня это похоже на то, что «Enum» должен соответствовать вашей спецификации очень хорошо. –
Ответ принят. Я думаю, что код может сломаться, потому что объекты хранятся в БД. Поэтому многие операции зависят от типа каждого объекта. 'is_trait_type', вероятно, распознает подкласс как' Float', но я не уверен, что он используется последовательно (это прототип), а 'is_trait_type' не работает для некоторых типов (см. [здесь] (http: // stackoverflow. ком/вопросы/29671969/питон-это-признак типа-оленья кожа-работа-с датой)). Для 'Enum' он прерывается, потому что мы сохраняем значения как строки (мы не понимали, что' traits' 'Enum' может содержать неоднородные значения). –