在 Python 中动态定义新的实例属性 [重复]

Posted

技术标签:

【中文标题】在 Python 中动态定义新的实例属性 [重复]【英文标题】:Defining a new instance attribute dynamically in Python [duplicate] 【发布时间】:2014-09-03 13:39:39 【问题描述】:

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

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

这种行为在 Python 3 中似乎是相同的

【问题讨论】:

【参考方案1】:

来自the python doc:

注意:object 没有__dict__,因此您不能将任意属性分配给object 类的实例。

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

另见__slots__

【讨论】:

dict的默认实现从哪里来,如果不是来自object

以上是关于在 Python 中动态定义新的实例属性 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

python学习之类和实例的属性;装饰器@property

Python实例属性限制(__slots__)

python cookbook第三版学习笔记十二:类和对象创建新的类或实例属性

Python-动态添加属性和方法

Python day 9 对实例动态绑定属性和方法

Python Day23