【问题标题】:traits difference between writing member as Trait or Trait() ex x=Str or x=Str()将成员写为 Trait 或 Trait() ex x=Str 或 x=Str() 之间的特征差异
【发布时间】:2015-10-29 14:03:06
【问题描述】:
from traits.api import Str
class Foo(HasTraits):
    a=Str
    b=Str()

成员 'a' 和 'b' 之间是否有任何行为差异?

特质属性总是特定于实例还是可以是类成员?

【问题讨论】:

    标签: python-2.7 enthought traitsui


    【解决方案1】:

    没有区别。 MetaHasTraitsHasTraits 背后的元类)将愉快地使用任何一种形式,并在没有参数的情况下隐式实例化前者。

    特征属性始终是实例属性,而不是类属性。

    【讨论】:

    • 话虽如此,我刚刚找到“add_class_trait()”:docs.enthought.com/traits/traits_user_manual/…
    • 同行提问,如果'a'是类的成员,a=MyClass()和a=Instance(MyClass)和a=Instance(MyClass, ()) ?
    • @user3391229 这应该是一个新问题,而不是评论。
    • add_class_trait() 是一个@classmethod,它将向一个类添加一个特征,这样该类的所有实例现在都将该特征作为实例属性。这与add_trait() 形成对比,instancemethod 仅将特征添加到您调用它的实例而不是同一类的其他实例。在任何一种情况下,特征定义一个实例属性而不是类属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    相关资源
    最近更新 更多