super(ClassName,self)._init_() 的作用是什么?
super(ClassName,self)._init_() 的作用是什么?
这个问题已经有了答案:
我有一个类看起来像这样:
#!/usr/bin/env python class Foo: def __init__(self, x): self.x = x def bar(self): self.bar1_out = self.x + 5 self.bar2_out = self.x + 1 return (self.bar1_out,self.bar2_out) def qux(self,myvalue = None): first, second = myvalue or self.bar() return first + 3, second + 6 def main(): """docstring for main""" f = Foo(5) mbr_out1, mbr_out2 = f.bar() print mbr_out1, "\t", mbr_out2 mqx_out1, mqx_out2 = f.qux() print mqx_out1, "\t", mqx_out2 qout1, qout2 = f.qux((1)) print qout1, "\t", qout2 if __name__ == '__main__': main()
我看到一些实现建议使用super
def __init__(self, x): super(Foo,self).__init__() self.x = x def bar(self) #etc.
我的问题是:
super(Foo,self).__init__()
的用途是什么?- 它与
self.x=x
有什么不同? - 如何使用
super()
使我的代码在上例中产生相同的结果?
admin 更改状态以发布 2023年5月23日
它与
self.x=x
有何不同?
super()
只有在子类化时才有用:
class Foo(object): def __init__(self, x): self.x = x class Bar(Foo): def __init__(self, x): super(Bar, self).__init__(x) self.initial_status = False
比在 Bar
的 __init__
中设置 self.x = x
更好。
区别在于 Bar
不需要关心 Foo
的实现。
如果你选择以一种将 self.x = 2 * x
设定为默认的方式更改 Foo
,那么你就不必同时更改 Bar
(它甚至可以位于不同的文件中——几乎保证会有人看不到这一点)。
在你的例子中,没有使用 super()
的意义,因为你没有对它进行子类化。