加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

为什么在python中双__init__?

发布时间:2020-12-20 11:40:45 所属栏目:Python 来源:网络整理
导读:我正在调查 python oop风格.我似乎__init__施工方法如下.我之前没有看到这种风格.为什么在这个东西中使用双__init__方法? EX- class MinimumBalanceAccount(BankAccount): def __init__(self,minimum_balance): BankAccount.__init__(self) self.minimum_ba
我正在调查 python oop风格.我似乎__init__施工方法如下.我之前没有看到这种风格.为什么在这个东西中使用双__init__方法?

EX-

class MinimumBalanceAccount(BankAccount):
    def __init__(self,minimum_balance):
        BankAccount.__init__(self)
        self.minimum_balance = minimum_balance

    def withdraw(self,amount):
        if self.balance - amount < self.minimum_balance:
            print 'Sorry,minimum balance must be maintained.'
        else:
            BankAccount.withdraw(self,amount)

解决方法

这是Python中类继承的一个例子.您已将BankAccount类继承到MinimumBalanceAccount类.但是,通过在MinimumBalanceAccount类中引入__init__函数,您已覆盖BankAccount类的__init__函数.基类可能会初始化您需要的一些变量.因此,它在Child类’__init__构造函数中被调用以确保它.

您可以使用超类来实现相同的行为.
在Python 2.x中,等价物将是

class MinimumBalanceAccount(BankAccount):
    def __init__(self,minimum_balance):
        self.minimum_balance = minimum_balance
        super(MinimumBalanceAccount,self).__init__()

或者在Python 3.x中,

class MinimumBalanceAccount(BankAccount):
    def __init__(self,minimum_balance):
        super().__init__()

但是,您必须明白,这将只运行它从基本方法中找到的任何__init__方法.因此,就多重继承而言,如果在基类中没有实现super,则很难调用各种其他类的__init__方法.因此,请避免不惜一切代价使用多重继承,或在所有类中实现super.

(eg)

class BankAccount(object):
    def __init__(self):
        # Some action here
        # But no super method called here

class MinimumBalanceAccount(BankAccount,LoanAccount):
    def __init__(self,minimum_value):
        super(MinimumBalanceAccount,self).__init__() # Calls BankAccount.__init__()
        super(MinimumBalanceAccount,self).__init__() # Still calls the same

如果您仍希望进行多重继承,最好使用ParentClass .__ init__方法,或者在所有基类中添加对方法__init__的超级方法调用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读