Python 语言问题 : attributes of object() vs Function

标签 python function object

在python中,像这样为对象实例创建新属性是非法的

>>> a = object()
>>> a.hhh = 1

抛出

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute 'hhh'

但是,对于一个函数对象,它是可以的。

>>> def f():
...   return 1
...
>>> f.hhh = 1

这种差异背后的原因是什么?

最佳答案

函数对象支持任意属性的原因是,在我们添加该特性之前,一些框架(例如解析器生成器)正在滥用函数文档字符串(和函数对象的其他属性)来隐藏对每个函数至关重要的信息它们——通过示例证明,需要将任意命名属性与函数对象关联起来,直接在语言中支持它们,而不是让(例如)文档字符串被滥用,这一点非常明显。

为了支持任意实例属性,一个类型必须为其每个实例提供一个 __dict__ —— 这对函数来说没什么大不了的(无论如何它们都不是小对象),但它很可能适用于其他对象打算很小。通过使 object 类型尽可能轻,并提供 __slots__ 以允许在 object 的子类型中避免每个实例 __dict__ ,我们尽我们所能支持小型、专门的“值”类型。

关于Python 语言问题 : attributes of object() vs Function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1072649/

相关文章:

excel - MAX + 左函数 Excel

c++ - 那个赋值符号是什么意思

javascript - 如果 aria-valuenow = 0,则将类添加到按钮

arrays - Java 8 数组中的频率对象

java - JPA - 执行更新

python - 使用 python flask 显示 opencv 图像

Python组合目录中的所有csv文件并按日期时间排序

python - 在 Pandas 系列上成对应用函数

java - 如何将 MyClass 类型的实例添加到 MyClass 数组(在 MyClass 的构造函数内声明)?

python - 在 if/else 范围内编写的变量在外部未定义