Ни один из базовых c типов не является ключевыми словами, они являются объектами типов
>>> type(int)
<class 'type'>
и они создают экземпляры своего класса при использовании
>>> type(int('100'))
<class 'int'>
Они работают как классы, которые вы определите себя
>>> class Foo:
... pass
...
>>> type(Foo)
<class 'type'>
>>> type(Foo())
<class '__main__.Foo'>
Единственное отличие состоит в том, что они находятся в пространстве имен встроенных, но из-за правила области видимости python встроенные проверяются последними. Любая создаваемая вами переменная находится в пространстве имен, проверяемом перед встроенными функциями, поэтому затеняет само встроенное.
Что касается того, почему почти все в python является объектом первого класса, и все они следуют одним и тем же правилам. Не существует специального кода или каких-либо специальных правил для int
(кроме его реализации) - он работает так же, как и любой другой класс.
Пространства имен являются иерархическими, в основном встроенными -> модуль -> локальное значение тот локальный модуль теней, который строит тени. del
удаляет переменную из пространства имен, удаляя эту тень. Если вы создадите переменную с именем int
, а затем del int
, python больше не найдет ее в локальном пространстве имен и вернется к оригиналу.
Конечно, вы всегда можете испортить ситуацию на более постоянной основе, если вы будете sh:
>>> __builtins__.__dict__['int'] = float
>>> int(1)
1.0