通常情况下,你可以设置为自定义对象的任意属性,例如不可能将属性设置为字符串?
----------
>>> a=A()
>>> a.foo=42
>>> a.__dict__
{'foo': 42}
>>>
----------
在另一方面,你可以做不一样的约束力和String对象:
----------
>>> a=str("bar")
>>> a.foo=42
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'foo'
>>> a.__dict__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute '__dict__'
>>>
----------
为什么?
是不是那'str'类型基本上被设计为不可改变的事实的结果?如果你从'str'继承创建一个类(在我的例子中是空类),你将不会得到上述错误。但是对于元组,你会得到这个错误(它们也是不可变的)。 – Tadeck
@Tadeck好吧,这两个原因真正起作用 - string是内置的,没有'__dict__',就像'__slots__'模块[边界情况](http://docs.python)的用户定义类一样。组织/ py3k /参考/ datamodel.html#笔记-上使用时隙)。无论如何,它也不会支持属性赋值,因为字符串是不可变的。这也可以在OP的第二个错误消息中看到(“str对象没有属性__dict__”)。 – delnan
@Tadeck它与可变性无关。试着用'list',你会得到相同的结果。你不能做到任何基本的内置类型 – agf