как я узнаю, какой путь точно супер() собирается взять в MRO?Как узнать, что такое супер() MRO, следующий в очереди?
ответ
чтения: Python's Super Considered Harmful и Python’s super() considered super!.
Это два больших ресурса, которые должны отвечать на все ваши вопросы.
Короче говоря, super()
использует стандартный метод разрешения разрешения (MRO), чтобы найти способ, который вы запрашиваете. Посмотрите на эту картинку:
E наследует от C и D. C наследует от А, и А от object
. D наследуется от B и B от object
. Красные стрелки показывают MRO, что super()
использует в своем поиске.
Отметьте, что super()
делает не Ссылка на родительский класс. Несмотря на то, что A наследуется от object
, а не D, D приходит в MRO. Поэтому, чтобы ответить на ваш вопрос, «следующий в строке» относится к MRO.
супер()
Основная цель супер() в Python, чтобы вызвать переопределенный метод базового класса в производном классе, так как супер делает на других языках. Обычно это делается так, что метод производного класса может увеличить базовый класс, вызвав его до или после его собственного кода, а не полностью заменить его. Функция
class Derived(Base):
def method(self, arg):
# Maybe do something here
super(Derived, self).method(arg)
# Could so something here as well
супер() на самом деле работает, возвращая объект класса прокси, что делегаты призывают к родителю. Преимущество использования функции super() в этом случае заключается в том, что вам не нужно явно указывать базовый класс, который помогает ремонтопригодности. Функция
супер() также может быть использован в более сложных ситуациях нескольких наследования, где он может делать такие вещи, как делегат класса сестры
В Python 3 вы можете просто использовать 'super(). Some_method()' для одиночного наследования. Явное связывание не требуется –
- 1. ли супер попробовать каждый класс в MRO
- 2. Что такое `супер` в Ruby?
- 3. Что такое супер в Objective-C?
- 4. Что такое следующий шаг?
- 5. Что делает «mro()»?
- 6. Что такое прикладной патч в очереди Mercurial?
- 7. Как узнать, что такое nodeType?
- 8. Как узнать, что такое язык?
- 9. Что такое супер объект в CodeIgniter?
- 10. Что такое супер в реализованном классе?
- 11. Что делает супер действительно в python
- 12. JQuery Как узнать, что такое ошибка ajax?
- 13. Как узнать, что такое длительность date_diff?
- 14. Что касается python MRO и как super() ведет себя
- 15. Devise Redirect After Регистрация: Что такое супер
- 16. Что такое sub и супер классы?
- 17. Контроль длины вил Супер очереди
- 18. Как узнать, что такое представление MySQL?
- 19. Как узнать, что такое storeName сертификата?
- 20. Как узнать, что такое правильный код?
- 21. Как узнать, что такое мой идентификатор магазина?
- 22. Как узнать, что такое использование таблицы Postgresql?
- 23. Как узнать, что такое имя моего проекта?
- 24. Что такое Java эквивалент C# Очереди
- 25. узнать, что такое размер блока для SWAP?
- 26. Не могу понять, что такое «следующий»
- 27. Что такое «действительный следующий URL» на Facebook?
- 28. Что такое значение, возвращенное следующий макрос
- 29. Что такое следующий снимок от cmake?
- 30. Что такое вызов супер в пользовательских классах ошибок в python?
Красная стрела - это то, что я не понимаю. зачем идти от e до c, а не от e до d и т. д. и т. д.? , потому что e наследует как из c, так и d, откуда я узнаю маршрут, который super() собирается взять в MRO? – supreme
Другими словами, почему C получает приоритет над D? и затем идет от C к A, по моему мнению, он должен сначала перейти на C или D, на вашей диаграмме он переходит на C, сначала не находит, что ему нужно, я бы подумал, что он будет выглядеть в D до перехода на A или B. – supreme