Я не уверен, что понимаю, что вы ищете, но я могу дать несколько рекомендаций:
Either
- хороший выбор, если вы разрешите и None
, и Dict
. - Используйте динамическую инициализацию , чтобы создать значение для черты во время выполнения.Рекомендуется использовать метод
__init__
. - Если вам действительно нужен метод
__init__
, вы должны вызвать внутри него super
, чтобы черты работали должным образом, например, `super() init (* args, ** kwargs)
Вот версия вашего кода, которая работает, и я думаю, что решает вашу проблему.
from traits.api import (HasTraits, Either, Dict)
class bar(HasTraits):
zap = Either(None, Dict)
def _zap_default(self):
add_dict_entries = {"One": 1}
new_dict = {"None": None}
new_dict.update(add_dict_entries)
return new_dict
theBar = bar()
print(theBar.zap)
И вот некоторые отзывы о коде, который не работал.Строка self.zap = Trait("None", new_dict)
ниже не работает, потому что она пытается создать объект Trait
, но self.zap
принимает только None
или Dict
.Я рекомендую использовать определения черт только для набора текста на уровне класса.Внутри методов используйте обычные типы Python.
from traits.api import (HasTraits, Trait)
class bar(HasTraits):
zap = Trait("None", {"None": None})
def __init__(self):
# In reality, determined programmatically at runtime.
add_dict_entries = {"One": 1}
new_dict = {"None": None}
new_dict.update(add_dict_entries)
self.zap = Trait("None", new_dict)
theBar = bar()