У відповідь Анона:
"Якщо вам потрібно зробити щось із супер- __init__
класу __init__
, крім того, що робиться в поточному класі , ви повинні зателефонувати самі, оскільки це не відбудеться автоматично"
Це неймовірно: він формулює точно протилежний принцип успадкування.
Це не те, що "щось із супер __init__
(...) не відбудеться автоматично" , це те, що воно буде автоматично, але це не відбувається, тому що базовий клас " __init__
переосмислюється визначенням похідних класів__init__
Тоді ЧОМУ визначаючи похідний_клас ' __init__
, оскільки він перекриває те, на що спрямований, коли хтось вдається до спадщини ??
Це тому, що потрібно визначити щось, що НЕ робиться в базовому класі ' __init__
, і єдина можливість отримати це - поставити його виконання у функцію похідного класу' __init__
.
Іншими словами, потрібно щось у базовому класі " __init__
на додаток до того, що автоматично робиться в базовому класі", __init__
якби цей останній не був відмінений.
НЕ навпаки.
Тоді проблема полягає в тому, що бажані вказівки, присутні в базовому класі ' __init__
, більше не активуються в момент інстанції. Для того, щоб компенсувати цю інактивацію, потрібно щось особливе: явно викликати базовий клас ' __init__
, щоб ЗБЕРІГАТИ , НЕ ДОДАТИ, ініціалізацію, виконану базовим класом' __init__
. Саме так сказано в офіційному документі:
Переважний метод у похідному класі може насправді хотіти розширити, а не просто замінити метод однойменного базового класу . Існує простий спосіб прямого виклику методу базового класу: просто зателефонуйте BaseClassName.methodname (self, аргументи).
http://docs.python.org/tutorial/classes.html#inheritance
Ось і вся історія:
коли мета KEEP - ініціалізація, виконана базовим класом, це чисте успадкування, нічого особливого не потрібно, потрібно просто уникати визначення __init__
функції у похідному класі
коли мета - ЗАМІНА ініціалізації, виконаної базовим класом, __init__
повинна бути визначена у похідному класі
коли метою є додавання процесів ADD до ініціалізації, що виконується базовим класом, __init__
повинен бути визначений похідний клас ' , що містить явний виклик базового класу__init__
Що я дивуюсь на посаді Анона - це не тільки те, що він висловлює протилежність теорії спадкування, але й те, що через них було порушено 5 хлопців, не обернувшись волоссям, і більше того, що за два роки в них ніхто не реагував нитка, цікаву тему якої треба читати порівняно часто.
object
був помилковим. Але зараз ви навіть не маєтеsuper
назви вашого запитання, на яке йдеться.