当前位置: 首页 > 面试题库 >

向python对象添加属性

马德厚
2023-03-14
问题内容

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

>>> 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__,可以使用hasattr(obj, '__dict__')

这也可能是有趣的阅读:

某些对象(例如内置类型及其实例(列表,元组等))没有__dict__。因此,无法在其上设置用户定义的属性。

关于Python的数据模型,包括另一个有趣的文章__dict____slots__等是这个从Python参考。



 类似资料:
  • 问题内容: (用Python shell编写) 为什么不允许对象向其添加属性? 问题答案: 请注意,实例没有属性: 一个在派生类中说明此行为的示例: 引用以下文档: […]声明采用一系列实例变量,并在每个实例中仅保留足够的空间来为每个变量保存一个值。因为未为每个实例创建空间,所以节省了空间。 编辑:要从评论中回答ThomasH,OP的测试类是“旧式”类。尝试: 您会注意到有一个实例。对象类可能没有

  • 我想要得到一个这样的对象: 通过这样编码: 但我总是得到以下几点:

  • 我需要填充一个json文件,现在我有如下内容: 我需要添加另一个“元素”。我的第一步是使用,现在我需要添加新元素。我想我必须使用添加另一个元素,我尝试了以下方法: 但是当我尝试做时,我得到了错误"对象没有方法推送",我认为我做了一些非常错误的事情,因为我没有告诉任何地方的"元素"。 我该怎么做? 编辑:对不起,我脑子里有很多困惑。 我认为从,但我首先得到了我在JSON中输入的内容。 用数组代替对象

  • 问题内容: 我已经读到,可以在Python中添加一个方法到现有对象(即,不是在类定义中)。 我知道这样做并不总是好的。但我们怎么做呢? 问题答案: 在Python中,函数和绑定方法之间存在差异。 绑定方法已“绑定”(描述性)到一个实例,并且无论何时调用该方法,该实例都将作为第一个参数传递。 但是,作为类(而不是实例)的属性的可调用对象仍未绑定,因此你可以在需要时随时修改类定义: 先前定义的实例也会

  • 问题内容: 嗨:在我们的应用程序中,我们已经从数据库中检索了一些数据,例如,表中包含以下字段:id,名称,年龄,地址,电子邮件。 然后,我们将根据客户提供一些这些属性。 如果客户需要ID,名称,我们将获得ID名称;如果客户需要ID,名称,年龄,则将获得ID,名称,年龄。 现在,我们想创建一个包装这些属性的类。但是,我们不知道确切要求哪个字段。 我可以在这里用Class替换地图吗? 问题答案: 如果

  • 问题内容: 假设我有一个对象 如何通过添加方法扩展该对象,并确保将来的实例具有此方法? 问题答案: 您需要将其添加到Foo的原型中: