考虑这个简单的最小示例:
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
,但是如何让默认的person在这里实例化呢?我不想将任何参数传递给Chair(**kwargs)
我希望这是自动完成的。print语句的预期输出是hooked
。在
这很有趣。根据实例docstring,如果klass是一个类,并且没有指定arg和kw,则调用Instance将返回None。arg和kw的默认值为None,因此调用Instance(Person)将返回None,如您所见。 我通过在实例调用中添加“kw={}”或“args=[]”来运行代码。在
这张照片像预期的那样“钩住”。在
您已经显式地定义了
Chair
,这样它的默认实例就不会实例化其属性sitting
,这就是发生的事情。如果您希望在默认情况下实例化sitting
,那么您可以。在所以你选吧。如果您希望保留椅子的原始定义,但这次确保将siting实例化为默认值,则:
但是如果您希望默认的椅子总是用默认的
^{pr2}$sitting
来实例化,那么(编辑:并显示traitsui在实际操作中):相关问题 更多 >
编程相关推荐