【发布时间】:2020-10-24 14:21:41
【问题描述】:
以下代码按排序顺序列出了名为“A”的类的属性:-
>>> class A():
def __init__(self, i):
self.at = i
>>> sorted(vars(A))
['__dict__', '__doc__', '__init__', '__module__', '__weakref__']
现在,打印键的值 '__dict__' 会产生以下结果:-
>>> vars(A)['__dict__'] #Value of '__dict__'
<attribute '__dict__' of 'A' objects>
根据文档,vars([object])
为具有
__dict__属性的模块、类、实例或任何其他对象返回__dict__属性。
我不明白的是列表中的'__dict__' 属性是vars() 用来返回A 的属性的相同属性 还是不同属性,它有一些其他目标,例如按照'__dict__' 持有的值建议(根据我) 实现A 的对象的命名空间。
编辑:-
问题的第一部分与other question 非常相关(@eliotness 也提到了),但第二部分(如下所述)我找不到任何答案或相关问题,因此,更改问题的标题。
让我们考虑另一个在 Python 中生成最终基类属性列表的代码,object:-
>>> sorted(vars(object))
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', ...., '__str__', '__subclasshook__']
>>> hasattr(object, '__dict__')
True
>>> sorted(getattr(object, '__dict__')) == sorted(vars(object))
True
另一个关于object.__dict__的文档引用
用于存储对象(可写)属性的字典或其他映射对象。
这一次,'__dict__' 没有出现在object 的列表中。那么,__dict__ 属性是否是 只读 属性以防object 或任何其他原因?
另外,是否有可能以任何方式在 Python 中获取 只读属性列表?
【问题讨论】:
标签: python dictionary magic-methods