实例化一个默认实例

2024-04-26 11:39:00 发布

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

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

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。在


Tags: instancenamefromimportapi示例classperson
2条回答

这很有趣。根据实例docstring,如果klass是一个类,并且没有指定arg和kw,则调用Instance将返回None。arg和kw的默认值为None,因此调用Instance(Person)将返回None,如您所见。 我通过在实例调用中添加“kw={}”或“args=[]”来运行代码。在

from traits.api import Instance, Str, HasTraits

class Person(HasTraits):
    name = Str("hooked")

class Chair(HasTraits):
    sitting = Instance(Person, kw = {})

t = Chair()
print t.sitting.name

这张照片像预期的那样“钩住”。在

您已经显式地定义了Chair,这样它的默认实例就不会实例化其属性sitting,这就是发生的事情。如果您希望在默认情况下实例化sitting,那么您可以。在

所以你选吧。如果您希望保留椅子的原始定义,但这次确保将siting实例化为默认值,则:

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来实例化,那么(编辑:并显示traitsui在实际操作中):

^{pr2}$

相关问题 更多 >