为什么这个代码在没有__init__方法时将参数传递给构造函数?

时间:2016-08-01 17:25:05

标签: python

所以,我正在网上阅读一些代码,我遇到了以下课程定义,我有点困惑;

class MyClass(OrderedDict):
    def __hash__(self):
        return hash(tuple(self.iteritems()))

在代码的其他地方有以下行;

MyClass(my_OD)

my_OD是有序词典。我的问题是,当没有__init__方法时,如何将参数传递给该类?这个变量在类中被分配到哪里?我来自Java,我相当肯定在Java中你不能在没有构造函数的情况下将参数传递给类,所以这种行为对我来说很陌生。

1 个答案:

答案 0 :(得分:6)

班级MyClass继承自OrderedDict

class MyClass(OrderedDict):

由于MyClass没有指定__init__方法,因此它调用OrderedDict类的init方法。因此构造函数的my_OD参数会传递给OrderedDict。顺便说一下,__init__在技术上不是构造函数

这个MyClass的目的是成为一个OrderedDict,它以与OrderedDict不同的方式计算其实例的hash。具体来说,OrderedDict没有在__hash__上定义的dict,在这种情况下,哈希定义为None - 所以dicts是不可拆卸的。 MyClass更改添加了获取哈希的方法,而其余功能则相同OrderedDictdict