Записи по тегу “наследование”.

Вызов конструктора родительского класса

Христос Воскрес!

Воистину все постигается в чтении умных книг. Буквально недавно сообразил, какую возможно грубейшую ошибку мы совершили в создании одного приложения на Python. Мы использовали для вызова методов родительского класса super.

Пример:

  1. class B:
  2.  
  3.     def __init__(x, y):
  4.         self.x = x
  5.         self.y = y
  6.  
  7.     def setX(x):
  8.         self.x = x
  9.  
  10.  
  11. class A(B):
  12.     def __init__(x, y, r):
  13.         super(A, self).__init__(x, y)
  14.         self.r = r
  15.  
  16.     def setX(x):
  17.         super(A, self).setX(x + self.r)

А теперь посмотрим как было бы правильнее

  1. class B:
  2.  
  3.     def __init__(self, x, y):
  4.         self.x = x
  5.         self.y = y
  6.  
  7.     def setX(self, x):
  8.         self.x = x
  9.  
  10.  
  11. class A(B):
  12.     def __init__(self, x, y, r):
  13.         B.__init__(self, x, y)
  14.         self.r = r
  15.  
  16.     def setX(self, x):
  17.         B.setX(self, x + self.r)