参见英文答案 > Understanding Python super() with __init__() methods 7个
我有一个看起来像这样的课程:
#!/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,mqx_out2
qout1,qout2 = f.qux((1))
print qout1,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()使我的代码在上面生成相同的结果
最佳答案
How does it differ from
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(),因为您没有子类.