Python 类、dict、self、init、args?

Python 类、dict、self、init、args?,python,class,arguments,self,Python,Class,Arguments,Self,有人能用文字解释前四行吗?我读过关于类和方法的书。但是这里看起来很混乱。这里有一篇很好的文章解释了\uu dict\uu: attrdict类通过从字典继承,然后将对象的\uuuuu dict\uuuuu设置为该字典来利用该属性。因此,任何属性访问都会针对父字典(即它继承自的dict类)进行 本文的其余部分对于理解Python对象也很有帮助: 我的逐行解释: class attrdict(dict): def __init__(self, *args, **kwargs):

有人能用文字解释前四行吗?我读过关于类和方法的书。但是这里看起来很混乱。

这里有一篇很好的文章解释了
\uu dict\uu

attrdict
类通过从字典继承,然后将对象的
\uuuuu dict\uuuuu
设置为该字典来利用该属性。因此,任何属性访问都会针对父字典(即它继承自的
dict
类)进行

本文的其余部分对于理解Python对象也很有帮助:


我的逐行解释:

class attrdict(dict):
    def __init__(self, *args, **kwargs):
        dict.__init__(self, *args, **kwargs)
        self.__dict__ = self

a = attrdict(x=1, y=2)
print a.x, a.y

b = attrdict()
b.x, b.y  = 1, 2
print b.x, b.y
此行将类attrdict声明为内置dict类的子类

class attrdict(dict):
这是您的标准
初始化方法。调用
dict.\uuuu init\uuuu(…)
是为了利用 class'(在本例中为dict)构造函数(
\uuuuu init\uuuu
)方法

最后一行,
self.\uuuuu dict\uuu uu=self
使传递给
\uuuuuu init\uuuu
方法的关键字参数(KWARG)可以像属性一样访问,即下面代码中的a.x、a.y


希望这有助于澄清您的困惑。

您的示例中没有使用位置参数。因此,有关守则是:

def __init__(self, *args, **kwargs): 
    dict.__init__(self, *args, **kwargs)
在第一行中,您将class
attrdict
定义为
dict
的子类。 在第二行中,定义将自动初始化实例的函数。将关键字参数(
**kargs
)传递到此函数。当您实例化
a
时:

class attrdict(dict):
    def __init__(self, **kwargs):
        dict.__init__(self, **kwargs)
        self.__dict__ = self
你真的在打电话吗

 a = attrdict(x=1, y=2)
dict实例核心初始化是通过初始化
dict
内置超类来完成的。这在第三行中完成,传递在
attrdict.\uuuu init\uuuu
中接收的参数。 因此,

使
self
(实例
a
)成为字典:

dict.__init__(self,{'x':1, 'y':2})
好事情发生在最后一行: 每个实例都有一个保存其属性的字典。这是self.\uuu dict.\uuu
(即
a.\uu dict.\uuu

例如,如果

self ==  {'x':1, 'y':2}
我们可以编写
a.x
a.y
,分别得到值1或2

第4行就是这样做的:

a.__dict__ = {'x':1, 'y':2} 
相当于:

self.__dict__ = self
然后我可以调用
a.x
a.y


希望不是太凌乱。

需要修复
\uuuu init\uuuu
。在它们周围加上反勾,它们看起来就像我的
\uuuuu init\uuuuu
。这非常有帮助。非常感谢。这是泄漏内存的好方法。请参阅以获取解释和更好的替代方案。
self.__dict__ = self
a.__dict__ = a  where a = {'x':1, 'y':2}