我有一门课是这样的:
#!/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()生成相同的结果?发布于 2014-03-31 07:23:20
它与
self.x=x有什么不同?
只有当您的子类为:
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__中设置__init__要好。
区别在于Bar不需要关心Foo的实现。
如果您选择以一种设置Foo的方式更改self.x = 2 * x,那么您也不必更改Bar (甚至可能处于不同的文件中--这几乎是肯定的)。
在您的示例中,没有必要使用super(),因为您没有子类。
https://stackoverflow.com/questions/22755467
复制相似问题