python - 为什么自定义类型接受 Python 中的临时属性(而内置函数不接受)?

标签 python attributes datamodel custom-type

我想知道为什么能够为自定义类型的实例创建新属性("new"意味着“以前未在类主体中定义”),但不能为内置类型,如 object 本身。

代码示例:

>>> class SomeClass(object):
...     pass
... 
>>> sc = SomeClass()
>>> sc.name = "AAA"
>>> sc.name
'AAA'
>>> obj = object()
>>> obj.name = "BBB"
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'object' object has no attribute 'name'

最佳答案

有些对象没有 __dict__ 属性(这是一个存储所有自定义“新定义”属性的字典)。您可以使用 __slots__ 变量模拟相同的行为(参见 python reference )。当您使用 __dict__ 对类进行子类化时, __slots__ 变量无效。由于您总是将 object 子类化为新样式类,因此 object 不能有 __dict__,因为那样就无法使用 __slots__。没有 __slots__ 的类占用更少的内存并且可能稍微快一些。

关于python - 为什么自定义类型接受 Python 中的临时属性(而内置函数不接受)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3374502/

相关文章:

python - 如何在 Django 模板中设置动态默认文本区域数据?

c++ - 继承和隐藏 parent 的属性

java - java 类中的依赖属性

sorting - Cassandra 按计数对结果排序

language-agnostic - 最佳实践 : Should one avoid bi-directional relationships?

c++ - 在另一个中使用 QAbstractListModel

python - IntelliJ IDEA 好像不支持 Django Framework

python - Python 函数上的 Spark UDF

python - "UserWarning: Unbuilt egg for setuptools"- 这到底是什么意思?

r - 如何将data.frame转换为arules的事务