Это пример наследования класса в Python. Вы унаследовали класс BankAccount
к классу MinimumBalanceAccount
. Однако, введя функцию __init__
в классе MinimumBalanceAccount
, вы переопределили функцию __init__
от BankAccount
класса. Базовый класс может инициализировать некоторые переменные, необходимые для вас. И поэтому он вызывается в классе 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__
метод, который он находит первый из базовые методы. Таким образом, с точки зрения множественного наследования было бы сложно вызвать методы __init__
различных классов, если super
не реализован в базовых классах. Поэтому, пожалуйста, избегайте использования множественного наследования любой ценой или реализуйте 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 super() с методами __init __()] (http://stackoverflow.com/questions/576169/understanding-python-super-with-init-methods) в маскировке. Но не совсем дубликат, так как неясно, что происходит, если код не говорит 'super (...) .__ init __()'. – smci