首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >超级(ClassName,self)._init_()的用途是什么

超级(ClassName,self)._init_()的用途是什么
EN

Stack Overflow用户
提问于 2014-03-31 07:08:41
回答 1查看 7.4K关注 0票数 8

我有一门课是这样的:

代码语言:javascript
复制
#!/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的实现

代码语言:javascript
复制
    def __init__(self, x):
        super(Foo,self).__init__()
        self.x = x
    def bar(self)
        #etc.

我的问题是:

  1. super(Foo,self).__init__()的用途是什么
  2. 它和self.x=x有什么区别?
  3. 如何使上面的代码在上面使用super()生成相同的结果?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-31 07:23:20

它与self.x=x有什么不同?

只有当您的子类为:

代码语言:javascript
复制
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(),因为您没有子类。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22755467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档