Skip to main content
 首页 » 编程设计

python之实例化 Enthought 特征的默认实例

2025年05月04日30freeliver54

考虑这个简单的最小示例:

from traits.api import Instance, Str, HasTraits 
 
class Person(HasTraits): 
    name = Str("hooked") 
 
class Chair(HasTraits): 
    sitting = Instance(Person) 
 
t = Chair() 
print t.sitting.name 

这会失败,因为 t.sitting 的计算结果为 None。 Enthought's traits module将强制 t.sitting 的类型是 Person 但我怎样才能让默认人在这里实例化?我不想将任何参数传递给 Chair(**kwargs) 我希望它自动完成。 print 语句的预期输出是 hooked。

请您参考如下方法:

您已经明确定义了 Chair,因此它的默认实例不会实例化其属性 sitting,这就是正在发生的事情。如果您希望默认实例化 sitting,那么您可以。

所以选择吧。如果您想保留 Chair 的原始定义,但这次确保将 sitting 实例化为其默认值,则:

from traits.api import Instance, Str, HasTraits 
 
class Person(HasTraits): 
    name = Str("hooked") 
 
class Chair(HasTraits): 
    sitting = Instance(Person) 
 
t = Chair(sitting=Person()) 
print t.sitting.name 

但是,如果您希望始终使用默认的 sitting 实例化默认的 Chair,那么(编辑:并显示 traitsui 的实际效果):

from traits.api import Instance, Str, HasTraits 
from traitsui.api import Item, View 
 
class Person(HasTraits): 
    name = Str("hooked") 
 
class Chair(HasTraits): 
    sitting = Instance(Person,()) 
    view = View((Item( 'sitting', style = 'custom'))) 
 
t = Chair() 
print t.sitting.name 
t.configure_traits() 
 
# or overridden by: 
w = Chair(sitting=Person(name='snooked')) 
print w.sitting.name