Есть ли способ сделать функцию класса unoverrableable? что-то вроде ключевого слова java final
. то есть любой переопределяющий класс не может переопределить этот метод.Как предотвратить функцию от переопределения в python
ответ
Проблема заключается в том, что вы пытаетесь писать на Python с использованием принципов Java. Некоторые вещи переносятся, но не все. В Python вы можете сделать следующее, и это прекрасно, но полностью противоречит тому, как Java думает об объектах.
class Thing(object):
x = 1
something = Thing()
something.y = something.x
Если вы действительно хотите, вы можете попробовать code posted here. Но, как вы видите, есть много кода, чтобы заставить его делать то, что вы хотите. Следует также отметить, что даже человек, разместивший код, говорит, что он может быть передан с использованием __dict__
или object.__setattr__
.
-1 Такой код заслуживает Мемориальной премии Мажино за бесполезные механизмы защиты. –
Почему -1? Я не писал код, с которым я связан, и я не поощрял его использование. Я нашел его с поиском google и подумал, что это помогло доказать мою точку зрения, что попытка принудительного исполнения final не является хорошей идеей в python. – unholysampler
Для связи с ним. –
Вы можете поместить комментарий там к действию:
# We'll fire you if you override this method.
Удивительно, насколько хорошо технически несложных решения, как это работает на практике.
+1 И если это было обнаружено в отчете об ошибке пользователя, мы будем стрелять из стеной, которые не тестировали приложение должным образом. –
Это должно быть частью строк документа (т. Е. Спецификацией API), а не комментарием – vog
Да, нет, не делайте этого.
Я должен добавить к этому после голосования. Некоторые механизмы защиты, по мнению некоторых, противоречат идее Python, что «мы все соглашаем взрослых здесь» .Кто вы хотите защитить такие функции? И если комментариев не хватит, почему что-то «сильнее»?
Я бы задокументировал ваши ожидания и ожидал, что другие программисты будут действовать ответственно.
- 1. Как предотвратить переменную от переопределения цикла в Python?
- 2. как предотвратить метод от переопределения в java
- 3. Как предотвратить текст внутри ввода от переопределения
- 4. Рельсы/ActiveRecord, как предотвратить отрыв от переопределения?
- 5. Как предотвратить макросъемки переопределения
- 6. Как предотвратить функцию от изменения?
- 7. Как отобразить функцию переопределения?
- 8. Вызывать родительскую виртуальную функцию от дочернего переопределения
- 9. Предотвратить функцию OpenCV CreateVideoWriter от печати на консоль в Python
- 10. Как предотвратить scaffold.css от переопределения моего пользовательского css?
- 11. Как предотвратить select2.js от переопределения пользовательских изменений?
- 12. Как я могу предотвратить логику EditorTemplate от переопределения логики просмотра?
- 13. Как предотвратить внешний CSS от переопределения стилей веб-компонентов
- 14. Как предотвратить функцию от преобразовывается к BOOL
- 15. Как предотвратить функцию jquery load() от переопределения шага выполнения анимированного gif?
- 16. Как предотвратить функцию в цикле
- 17. Предотвращение функции переопределения в Python
- 18. Класс переопределения класса Python
- 19. Как переопределить функцию без переопределения в C#?
- 20. Предотвратить класс child от переопределения метода у родителя
- 21. Как повторно инициализировать функцию переопределения таблицы?
- 22. предотвратить управление гиперссылкой из переопределения атрибута navigateurl
- 23. Как предотвратить округление числа от Python Tkinter
- 24. Python Beginner: Как предотвратить «наконец» от выполнения?
- 25. Как предотвратить колесо python от расширения shebang?
- 26. Как предотвратить python urllib3 от ответа кэширования
- 27. Как предотвратить функцию системы() от вывода на печать в браузере?
- 28. метод переопределения класса в python
- 29. Предотвратить абстрактные реализации переопределения определенного метода
- 30. Обнаружение переопределения kwarg в Python
У вас даже нет * частных * методов в Python, члены '__xxx' только затенены. Я действительно был бы удивлен, если бы было что-то вроде ключевого слова «final». – Boldewyn
Почему? Каков прецедент для предотвращения этого? Люди могут читать ваш источник и переписывать функцию. Что ты пытаешься сделать? –
Я не знаю, почему все вы предполагаете, что я хочу это для предотвращения кого-то еще от переопределения - я хочу, чтобы я не смог от случайного переопределения его в будущем. Предполагая, что у меня есть относительно глубокое дерево наследования, и один из «более глубоких» классов случайно переопределит func (забыв об этом даже) – olamundo