为什么dictproxy改变了它的id?

时间:2016-02-25 12:08:43

标签: python

我试图理解为什么dictproxy >>> class A(object): pass >>> A.__dict__ is A.__dict__ False 每次访问时都会更改其ID。

channels = 32;
sampleRate = 500;
fid = fopen('C:\Users\metin.senturk\Desktop\MyFile.bin', 'rb');
rawData = fread(fid, [channels, inf], 'float32');

根据我的理解,dictproxy是一个特殊的只读字典,但这并不能解释这种行为。

1 个答案:

答案 0 :(得分:2)

A.__dict__不是静态对象,每次我们访问A.__dict__时,它都会在内部调用一个方法,该方法返回我们得到的内容。所以每次我们得到不同的对象。

  

现在该方法是什么

当我们访问A.__dict__时,此调用将被评估为meta_type_of_A.__dict__[__dict__],这意味着它将调用A的元类的__getattribute__

>>> class mymeta(type):
    def __init__(cls, name, bases,dict):
        print "in my meta"
    def __getattribute__(*args):
        print "in get attribute of meta class"
        return "A test string"


>>> class A(object):
    __metaclass__ = mymeta
    pass

in my meta
>>> d = A.__dict__
in get attribute of meta class
>>> print d
A test string