向python列表或dict对象添加任意随机属性

2024-06-01 05:28:05 发布

您现在位置:Python中文网/ 问答频道 /正文

当我在做一些与oop相关的事情时,我突然想到了这个问题。 如果我有这样的课程:

>>> class foo(object):
     def __init__(self):
         pass

现在我们可以为foo实例设置任意随机属性,如下所示:

^{pr2}$

但为什么我们不能对其他python结构对象(如list或dict对象)执行此操作:

>>> l=[1,2,3,4]
>>> l.some_attribute="any-value"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'some_attribute'

我试图理解这背后的逻辑和观点。我的解释是这个:-
因为所有python对象都有一个从Object基继承的__setattr__方法上课。而我们使用语法设置python对象的属性:a.any_attribute="any-value",调用__setattr__方法。由于我的foo(),一个foo类的实例没有只设置预定义属性的限制,因此它可以自由设置任何属性。 但是在列表和其他数据结构对象的情况下,__setattr__方法必须有一些过激的行为,它只允许设置预定义的属性。在

我说得对吗? 如果我是对的,那么这背后的基本语义是什么呢。为什么我们不允许为这些类型的对象设置任何随机属性。 如果允许这种行为,是否存在任何缺陷或违反基本python信念的行为?在

我知道我在某些方面可能是错的,但既然这个问题听起来很有趣,我就问了。 当做。在

EDIT-好的,我理解答案,这个事实就是类应该有一个__dict__方法来向其添加任何随机属性实例。但是,主要问题是 如果允许这种行为,是否存在任何缺陷或违反基本python信念的行为?


Tags: 对象实例方法属性objectfoovalueany