我正在调查
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__的超级方法调用.