继承时如何传递自我?

时间:2017-11-09 18:33:16

标签: python self

class Trout(Fish):
    def __init__(self, water = "freshwater"):
        self.water = water
        super().__init__(self)

在这一行super().__init__(self)中,如何将self参数传递给函数?

2 个答案:

答案 0 :(得分:1)

说你有代码

f = Trout()

在幕后,这大致相当于

f = Trout.__new__()
Trout.__init__(f)

Trout.__init__内,super()返回一个代理对象,该对象以Trout的方法解析顺序表示相应的类;你实际上不必将self作为一个明确的论点; super().__init__默认为已存在self的绑定方法。

答案 1 :(得分:0)

调用该方法的对象是隐式(自动)该方法的第一个参数。这是语言与自己达成的协议。

实际上,假设您有某个类型的对象obj,其方法stuff采用简单的布尔参数。您将该方法调用为

obj.stuff(True)

如果这是"正常"函数,你可以调用它

stuff(obj, True)

...但这并不是类和对象的语法如何工作。在任何情况下,函数/方法标题看起来都是一样的:

def stuff(self, flag):

这里的不同之处在于每个对象类都可以有一个方法stuff,我们不必给它们不同的名称。当我们使用类方法时,编译器通过查看调用对象的类来知道要使用哪一个。

__init__方法的特定情况下,对象在输入后立即创建并分配给self。这是语言与其自身的另一个自动协议:这个特别命名的函数包括在您输入时隐藏的默认对象创建。