- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
>>> class A(object): pass
...
>>> A.__dict__
<dictproxy object at 0x173ef30>
>>> A.__dict__.__dict__
Traceback (most recent call last):
File "<string>", line 1, in <fragment>
AttributeError: 'dictproxy' object has no attribute '__dict__'
>>> A.__dict__.copy()
{'__dict__': <attribute '__dict__' of 'A' objects> ... }
>>> A.__dict__['__dict__']
<attribute '__dict__' of 'A' objects> # What is this object?
A.something = 10
, 这进入
A.__dict__
.什么
是 此
<attribute '__dict__' of 'A' objects>
在
A.__dict__.__dict__
中找到,它什么时候包含一些东西?
最佳答案
首先A.__dict__.__dict__
不同于 A.__dict__['__dict__']
.前者不存在,后者是__dict__
类的实例将具有的属性。它是一个数据描述符对象,返回特定实例的内部属性字典。总之,__dict__
对象的属性不能存储在对象的 __dict__
中,因此可以通过类中定义的描述符访问它。
要理解这一点,您必须阅读 documentation of the descriptor protocol .
简短版本:
a
类(class)A
, 访问 a.__dict__
由 A.__dict__['__dict__']
提供与 vars(A)['__dict__']
相同. A
, 访问 A.__dict__
由 type.__dict__['__dict__']
提供(理论上)与 vars(type)['__dict__']
相同. __getattribute__
实现)和
__dict__
提供对属性的访问。
vars(ob)
使用的属性/协议(protocol).
__dict__
对象创建一个单独的
dict
存储属性的对象,以及
__getattribute__
首先尝试访问它并从那里获取属性(在尝试使用描述符协议(protocol)在类中查找属性之前,以及在调用
__getattr__
之前)。
__dict__
类上的描述符实现了对这个字典的访问。
a.name
相当于按顺序尝试:type(a).__dict__['name'].__get__(a, type(a))
(仅当 type(a).__dict__['name']
是数据描述符时),a.__dict__['name']
, type(a).__dict__['name'].__get__(a, type(a))
, type(a).__dict__['name']
. a.__dict__
做同样的事情,但出于明显的原因跳过了第二步。 __dict__
对于要存储在自身中的实例,它直接通过描述符协议(protocol)访问,并存储在实例的特殊字段中。
__dict__
是一个特殊的代理对象,它伪装成一个字典(但可能不是内部的),并且不允许您更改它或将其替换为另一个。除其他外,此代理允许您访问特定于它的类的属性,而不是在其基类之一中定义的。
vars(cls)
一个空类携带三个描述符:
__dict__
用于存储实例的属性,
__weakref__
由
weakref
内部使用, 和
__doc__
类的文档字符串。如果您定义
__slots__
,前两个可能会消失。 .那么你就没有
__dict__
和
__weakref__
属性,但相反,每个插槽都有一个类属性。实例的属性不会存储在字典中,并且对它们的访问将由类中的相应描述符提供。
A.__dict__
的不一致不同于
A.__dict__['__dict__']
是因为属性
__dict__
作为异常(exception),从未在
vars(A)
中查找过,所以它的真实性对于您使用的几乎任何其他属性都不是真实的。例如,
A.__weakref__
和
A.__dict__['__weakref__']
是一样的.如果这种不一致不存在,使用
A.__dict__
行不通,您必须始终使用
vars(A)
反而。
关于python - Python 类的 __dict__.__dict__ 属性是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4877290/
你能比较一下属性吗 我想禁用文本框“txtName”。有两种方式 使用javascript,txtName.disabled = true 使用 ASP.NET, 哪种方法更好,为什么? 最佳答案 我
Count 属性 返回一个集合或 Dictionary 对象包含的项目数。只读。 object.Count object 可以是“应用于”列表中列出的任何集合或对
CompareMode 属性 设置并返回在 Dictionary 对象中比较字符串关键字的比较模式。 object.CompareMode[ = compare] 参数
Column 属性 只读属性,返回 TextStream 文件中当前字符位置的列号。 object.Column object 通常是 TextStream 对象的名称。
AvailableSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。 object.AvailableSpace object 应为 Drive 
Attributes 属性 设置或返回文件或文件夹的属性。可读写或只读(与属性有关)。 object.Attributes [= newattributes] 参数 object
AtEndOfStream 属性 如果文件指针位于 TextStream 文件末,则返回 True;否则如果不为只读则返回 False。 object.A
AtEndOfLine 属性 TextStream 文件中,如果文件指针指向行末标记,就返回 True;否则如果不是只读则返回 False。 object.AtEn
RootFolder 属性 返回一个 Folder 对象,表示指定驱动器的根文件夹。只读。 object.RootFolder object 应为 Dr
Path 属性 返回指定文件、文件夹或驱动器的路径。 object.Path object 应为 File、Folder 或 Drive 对象的名称。 说明 对于驱动器,路径不包含根目录。
ParentFolder 属性 返回指定文件或文件夹的父文件夹。只读。 object.ParentFolder object 应为 File 或 Folder 对象的名称。 说明 以下代码
Name 属性 设置或返回指定的文件或文件夹的名称。可读写。 object.Name [= newname] 参数 object 必选项。应为 File 或&
Line 属性 只读属性,返回 TextStream 文件中的当前行号。 object.Line object 通常是 TextStream 对象的名称。 说明 文件刚
Key 属性 在 Dictionary 对象中设置 key。 object.Key(key) = newkey 参数 object 必选项。通常是 Dictionary 
Item 属性 设置或返回 Dictionary 对象中指定的 key 对应的 item,或返回集合中基于指定的 key 的&
IsRootFolder 属性 如果指定的文件夹是根文件夹,返回 True;否则返回 False。 object.IsRootFolder object 应为&n
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
FreeSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。只读。 object.FreeSpace object 应为 Drive 对象的名称。
FileSystem 属性 返回指定的驱动器使用的文件系统的类型。 object.FileSystem object 应为 Drive 对象的名称。 说明 可
Files 属性 返回由指定文件夹中所有 File 对象(包括隐藏文件和系统文件)组成的 Files 集合。 object.Files object&n
我是一名优秀的程序员,十分优秀!