AttributeError:“TraitCompound”对象没有属性“clone”

2024-05-31 23:18:03 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我想使用Traits包创建一个“base”属性,可以是“无”字符串或字典,其中键为“hrf”或“fourier”或“fourier_-han”或“gamma”或“fir”,值为字典,键为“derivs”或“length”或“order”,值为列表或浮点)。例:

基数==“无”

bases=={'hrf':{'derivs':[0,0]}}

基=={'fourier':{'length':1.4,'顺序':3}

如果我定义一个“无”字符串或一个字典,其中键为“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'

为什么?


Tags: 字典fooorderenumlengthdictfouriertraits
1条回答
网友
1楼 · 发布于 2024-05-31 23:18:03

这不是我第一次与开发Traits项目的团队互动

As always, they very quickly managed to solve the problem and gave a very detailed answer on it.

简而言之,早在Traits 6.1中,一方面,我们更喜欢:

traits.Union(traits.Float, traits.List)

traits.Either(traits.Float, traits.List)

另一方面,请注意Union()的default_value参数(default表示任一个()。最好用其他方法初始化它

相关问题 更多 >