Comments 16
Тут тоже https://docs.python.org/
Интересные возможности. Впрочем, вариант с compile для метода немного похож на хак, так как с его помощью наверняка можно сразу целый класс с объявлениями всех методов скомпилировать.
Баловство все это.
Может кроме метаклассов. Да и они большинству разработчиков не известны, и это к счастью.
Почему это плохо:
- если вам нужна подобная магия, вам стоит подумать над проектом еще раз
- чем грозит использование eval и ему подобных вызовов (в разных языках они называются по разному) для безопасности в истории есть достаточно примеров, особенно для сервисов
- вам нужно корректно отрабатывать ошибки, начиная с банальных опечаток, нюансов разных версий синтаксиса и отсутствия зависимостей или их некорректную версию
- вы теряете оптимизацию самого питона. он не зря сохраняет байткод. компилировать свой код налету — это может быть очень дорого и долго.
PS. По поводу, если не создания, то динамической привязки методов, поищите информацию об unbound методах в питоне. В тройке от них отказались, оставив bounded и static, но зато вы окажитесь рядом с информацией, как добавить в класс метод даже не прибегая к метапрограммированию.
Блин, зачем эта статья нужна? Есть же документация. Да и тема давно много раз обсосона с разных сторон. Ещё одна статья про метаклассы...
Однако концепция динамического программирования хорошо раскрывает внутренне устройство Python.
Думаю, что Вы не имели ввиду устоявшийся термин.
builtins = [list(), dict(), tuple()]
for obj in builtins:
print(type(obj))
<class 'type'>
<class 'type'>
<class 'type'>
А у меня:
builtins = [list(), dict(), tuple()]
>>> for obj in builtins:
... print(type(obj))
...
<class 'list'>
<class 'dict'>
<class 'tuple'>
?
Add: Да, теперь норм
думаю, что в контексте задач динамического программирования
Должен вас огорчить, к задачам динамического программирования это не имеет никакого отношения, это скорее из серии метапрограммирования.
Динамическое определение класса в Python