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

为什么我不能直接将属性添加到任何python对象?

苏彭薄
2023-03-14
问题内容

我有以下代码:

>>> class G:
...   def __init__(self):
...     self.x = 20
...
>>> gg = G()
>>> gg.x
20
>>> gg.y = 2000

这段代码:

>>> from datetime import datetime
>>> my_obj = datetime.now()
>>> my_obj.interesting = 1
*** AttributeError: 'datetime.datetime' object has no attribute 'interesting'

根据我的Python知识,我会说它datetime覆盖setattr/ getattr,但是我不确定。你能在这里阐明一下吗?

编辑:我对并不特别感兴趣datetime。我一直在想对象。


问题答案:

我的猜测是,datetime的实现使用slots以获得更好的性能。

使用时__slots__,解释器仅为列出的属性保留存储空间,而没有其他内容。这样可以提供更好的性能并使用更少的存储空间,但这也意味着您不能随意添加新属性。

在此处阅读更多信息:http :
//docs.python.org/reference/datamodel.html



 类似资料:
  • 问题内容: 我试图将ArrayList添加到Jlist,但我给出的唯一理解是编写这样的代码: 让我感到困惑的是,为什么我不能像这样直接将ArrayList直接添加到Jlist中: 提前致谢。 问题答案: 包含“ helper”构造函数的目的是使使用简单数据结构更加容易。 的(和许多Swing组件)实际上是指与提供实际数据视图模型中使用。 原始设计可以追溯到将Swing纳入主库之前(在JDK 1.3

  • 问题内容: 我试图将ArrayList添加到Jlist,但我给出的唯一理解是编写这样的代码: 让我感到困惑的是,为什么我不能像这样直接将ArrayList直接添加到Jlist中: 提前致谢。 问题答案: 包含“ helper”构造函数的目的是使使用简单数据结构更加容易。 的(和许多Swing组件)实际上是指与提供实际数据视图模型中使用。 原始设计可以追溯到将Swing纳入主库之前(在JDK 1.3

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

  • 我正在尝试将ArrayList添加到Jlist,但我给出的唯一理解方法是编写如下代码: 让我困惑的是,为什么我不能像这样直接把数组列表添加到Jlist中: 先谢谢你。

  • 问题内容: 我继承了其他开发人员编写的一些JavaScript代码。他不喜欢我们在整个项目中使用的网格组件,因此他决定编写自己的网格组件。他写的表格无法对日期进行排序,因为它只能绑定到字符串/数字。他在使用日期之前将所有日期转换为字符串。我查看了他编写的date函数的字符串格式,发现可以将具有原始值的date属性添加到字符串中,然后在排序时查看该字符串是否具有date属性并基于此进行排序。但是,似

  • 为什么在这里就能看到添加的属性?