【发布时间】:2020-05-16 08:45:59
【问题描述】:
假设我想使用 Traits 包创建一个“bases”属性,该属性可以是“none”字符串或带有“hrf”或“fourier”或“fourier_han”或“gamma”键的字典或“fir”,值是字典,键是“衍生”或“长度”或“顺序”,值是列表或浮点数)。例如:
碱基 == '无'
或
基数 == {'hrf': {'derivs': [0, 0]}}
或
基数 == {'fourier': {'length': 1.4, 'order': 3}}
如果我定义一个 'none' 字符串或字典,其键为 'hrf' 或 'fourier' 或 'fourier_han' 或 'gamma' 或 'fir' 并且值是字典的键为 'derivs ' 或 'length' 或 'order' 并带有列表的值)它工作正常:
>>> import traits.api as traits
>>> class Foo(traits.HasTraits):
... bases = traits.Either(traits.Dict(traits.Enum("hrf","fourier","fourier_han","gamma","fir"),traits.Dict(traits.Enum("derivs","length","order"), traits.List)),'none',default={"hrf":{"derivs":[0,0]}})
...
>>> foo=Foo()
>>> foo.bases
{'hrf': {'derivs': [0, 0]}}
但这并不是我想要的。如果现在我尝试在内部字典中提供使用 list 或 float 的可能性,则它不起作用:
>>> import traits.api as traits
>>> class Foo(traits.HasTraits):
... bases = traits.Either(traits.Dict(traits.Enum("hrf","fourier","fourier_han","gamma","fir"),traits.Dict(traits.Enum("derivs","length","order"), traits.Either(traits.List, traits.Float))),'none',default={"hrf":{"derivs":[0,0]}})
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in Foo
File "/home/econdami/.local/lib/python3.7/site-packages/traits/trait_types.py", line 2804, in __init__
handler = handler.clone()
AttributeError: 'TraitCompound' object has no attribute 'clone'
为什么?
【问题讨论】:
-
请问您能在错误跟踪器上打开一个问题吗?
-
(我删除了“traits”标签,因为它指的是“traits”的不同用法/含义。)
-
我在enthought/traits github 上开了一张票。这就是你提议的吗?感谢您删除标签。
-
非常感谢!是的,这就是我的意思。这对我来说似乎是一个可能的错误。 (我是 Traits 库的当前维护者,但仅限于工作时间。)
-
非常感谢您,这可以等待工作时间!