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

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

在代码的其他地方有以下行;
MyClass(my_OD)

其中 my_OD 是有序字典。我的问题是,当没有 __init__ 方法时,如何将参数传递给此类?这个变量在类中被赋值在哪里?我来自 Java 并且我相当肯定在 Java 中你不能将参数传递给没有构造函数的类,所以这种行为对我来说是陌生的。

最佳答案

MyClass 类继承自 OrderedDict :

class MyClass(OrderedDict):

由于 MyClass 没有指定 __init__ 方法,它调用 OrderedDict 类的 init 方法。所以构造函数的 my_OD 参数被传递给 OrderedDict。顺便说一句, __init__ 从技术上讲不是构造函数。

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

关于python - 当没有 __init__ 方法时,为什么此代码将参数传递给构造函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38704718/

10-15 08:48