class Trout(Fish):
def __init__(self, water = "freshwater"):
self.water = water
super().__init__(self)
在这一行super().__init__(self)
中,如何将self
参数传递给函数?
答案 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
。这是语言与其自身的另一个自动协议:这个特别命名的函数包括在您输入时隐藏的默认对象创建。