В Python вы можете легко изменять все стандартные переменные, доступные в глобальном пространстве имён:
>>> print = 42
>>> print(42)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
Это может быть полезно, если ваш модуль определяет какие-то функции с теми же именами, что и встроенные. Такое также случается при метапрограммировании, когда вы принимаете произвольную строку в качестве идентификатора.
Тем не менее, даже если вы затеняете (shadow) некоторые встроенные имена, вам всё ещё может понадобиться доступ к оригинальным объектам, на которые они изначально ссылались. Для этого существует модуль
builtins
:
>>> import builtins
>>> print = 42
>>> builtins.print(1)
1
Также переменная
__builtins__
доступна в большинстве модулей. Однако здесь есть нюанс. Во-первых, это деталь реализации CPython, и обычно её вообще не стоит использовать. Во-вторых, __builtins__
может ссылаться либо на builtins
, либо на builtins.__dict__
, в зависимости от того, как именно был загружен текущий модуль.👉@BookPython
>>Click here to continue<<