是否可以从类范围中创建属性?

时间:2011-10-12 00:17:36

标签: python oop

是否可以向其范围之外的对象添加属性?

即:以下代码不起作用,我该如何处理该代码?

b = object()
b.foo = "bar"

2 个答案:

答案 0 :(得分:5)

一般情况下,这是可能的。但是,大多数类型都不可能用C语言实现,而不是用Python实现。不幸的是,这适用于最常用的标准Python解释器的内置类型。

如果你在Python中定义了自己的类,你会发现它工作正常。

class MyObject(object):
    pass

b = MyObject()
b.foo = "bar"

答案 1 :(得分:5)

object()的实例是“featureless”,因为它们没有任何魔术方法(没有dict,没有getter / setter,没有迭代等)来指定你可能的默认行为期待来自其他类型。为了使它起作用,您必须先将object作为子类:

class Foo(object): pass
f = Foo()
f.bar = "omgwtf!"