将任何随机属性添加到python列表或dict对象

时间:2014-02-28 19:09:52

标签: python oop python-2.7

当我做一些与oop相关的事情时,我才想到这件事。 如果我有这样的课程:

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

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

>>> a=foo()
>>> a.any_attribute="any-value"

但为什么我们不能为其他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对象都有__setattr__方法,这些方法都是从Object基类继承的。我们使用语法a.any_attribute="any-value"设置python对象的属性,__setattr__方法被调用。由于我的foo()foo类的实例没有限制只设置预定义的属性,因此可以自由设置任何属性。 但是对于列表和其他数据结构对象,__setattr__方法必须有一些覆盖行为,只允许设置预定义属性。

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

我知道在某些方面我可能错了但是因为这个问题听起来很有趣,所以我问道。 问候。

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

0 个答案:

没有答案