我正在研究 python oop 风格。我似乎 __init__
构造方法如下。我以前没见过这种风格。为什么要像在这些东西中那样使用双重 __init__
方法?
前-
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__
构造函数中被调用以确保这一点。
您可以使用 super
类来实现相同的行为。
在 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__
方法或将 super
方法调用添加到 __init__
在所有基类中。
关于python - 为什么在 python 中使用 dual __init__?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28544469/