>> a.foo = 2 Traceback (most recent call last): File "", line 1, -6ren">
gpt4 book ai didi

python - 向python对象添加属性

转载 作者:IT老高 更新时间:2023-10-28 21:49:34 25 4
gpt4 key购买 nike

这件事困扰了我一段时间。为什么我做不到:

>>> a = ""
>>> a.foo = 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'foo'

...虽然我可以做到以下几点?

>>> class Bar():
... pass
...
>>> a = Bar()
>>> a.foo = 10 #ok!

这里的规则是什么?你能指点我一些描述吗?

最佳答案

您可以为任何具有 __dict__ 的对象添加属性。

  • x = object() 没有它,例如。
  • 字符串和其他简单的内置对象也没有。
  • 使用 __slots__ 的类也没有。
  • class 定义的类有它,除非前面的语句适用。

如果一个对象使用 __slots__/没有 __dict__,通常是为了节省空间。例如,在 str 中,使用 dict 就太过分了——想象一下非常短的字符串会产生多大的膨胀。

如果要测试给定对象是否有 __dict__,可以使用 hasattr(obj, '__dict__')

This阅读起来可能也很有趣:

Some objects, such as built-in types and their instances (lists, tuples, etc.) do not have a __dict__. Consequently user-defined attributes cannot be set on them.

另外一篇关于Python的数据模型包括__dict____slots__等有趣的文章是this来自python引用。

关于python - 向python对象添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5907937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com