所以,我正在网上阅读一些代码,我遇到了以下类定义,我有点困惑;
class MyClass(OrderedDict):
def __hash__(self):
return hash(tuple(self.iteritems()))
Run Code Online (Sandbox Code Playgroud)
在代码的其他地方有以下行;
MyClass(my_OD)
Run Code Online (Sandbox Code Playgroud)
哪里my_OD是有序字典.我的问题是,当没有__init__方法时,如何将参数传递给这个类?这个变量在类中被分配到哪里?我来自Java,我很确定在Java中你不能将参数传递给没有构造函数的类,所以这种行为对我来说很陌生.
该类MyClass继承自OrderedDict:
class MyClass(OrderedDict):
Run Code Online (Sandbox Code Playgroud)
由于MyClass没有__init__指定方法,因此它调用OrderedDict类的init方法.因此my_OD构造函数的参数被传递给OrderedDict.顺便说一下,__init__技术上不是构造函数.
这样做的目的MyClass是成为一个OrderedDict,hash它以与OrderedDict不同的方式计算其实例.具体来说,OrderedDict没有a __hash__,在dicts 上定义,在这种情况下,散列被定义为None- 所以dicts是不可散列的.MyClass更改添加了获取哈希的方法,而其余功能是相同的OrderedDicts和dicts.