Здесь видно, что делает Python, но способ переопределения немного экстремален.Возьмите случай, когда класс A определяет 100 атрибутов, а класс B наследует их, и добавьте еще 1 атрибут.Мы хотим, чтобы __init __ () для B вызывал __init __ () для A, и чтобы код B определял только его единственный атрибут.Точно так же, если мы определим метод reset () в A, чтобы установить все атрибуты на ноль, то соответствующий метод reset () для B должен иметь возможность просто вызвать метод reset () для A, а затем обнулять единственный атрибут B вместонеобходимости дублировать весь код А.Python усложняет то, что должно быть главным преимуществом объектно-ориентированного программирования;то есть повторное использование кода.Лучший вариант здесь - избежать переопределения методов, которые мы действительно хотим использовать повторно.Если вы хотите получить представление о сложностях с Python, попробуйте следующий код:
class X(object):
def __init__ ( self ):
print "X"
self.x = 'x'
self.reset()
print "back to X"
def reset ( self ):
print "reset X"
self.xx = 'xx'
class Y(X):
def __init__ ( self ):
print "Y"
super(Y,self).__init__()
self.y = 'y'
self.reset()
print "back to Y"
def reset ( self ):
print "reset Y"
super(Y,self).reset()
print "back to reset Y"
self.yy = 'yy'
aY = Y()
(Чтобы это работало правильно, удалите вызов self.reset () в __init __ () для класса Y.)