当我在做一些与oop相关的事情时,我突然想到了这个问题。 如果我有这样的课程:
>>> class foo(object):
def __init__(self):
pass
现在我们可以为foo
实例设置任意随机属性,如下所示:
但为什么我们不能对其他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信念的行为?
目前没有回答
相关问题 更多 >
编程相关推荐