在Python中动态定义新的实例属性

Defining a new instance attribute dynamically in Python

本问题已经有最佳答案,请猛点这里访问。

为什么可以为python中的每个类实例动态定义一个新属性,只要它不是object类型?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class NewStyle(object):
    pass

class OldStyle:
    pass

a = object()
# This line raises AttributeError
a.foo = 1

# All of these work fine
a = Exception()
a.foo = 1

a = OldStyle()
a.foo = 1

a = NewStyle()
a.foo = 1

在Python3中,这种行为似乎是相同的


来自python文档:

Note: object does not have a __dict__, so you can’t assign arbitrary attributes to an instance of the object class.

一些类定义提供了一个__dict__属性,然后默认将其包含在实例中。

另见__slots__