Я думаю, вы должны еще раз прочитать некоторые условные обозначения для идентификаторов Python
.
Python Идентификаторы:
Python, идентификатор представляет собой имя, используемое для идентификации переменной, функции, класс, модуль или другой объект. Идентификатор начинается с буквы от A до Z или от a до z или символа подчеркивания (_), за которым следует ноль или более букв, знаков подчеркивания и цифр (от 0 до 9).
Python не допускает знаков препинания, таких как @, $ и% в пределах идентификаторов. Python - это язык программирования, чувствительный к регистру. Таким образом, Manpower и рабочая сила являются двумя разными идентификаторами в Python.
Вот именования идентификаторов Python:
Имена классов начинаются с прописной буквы. Все остальные идентификаторы начинаются с строчной буквы.
Запуск идентификатора с одним лидирующим подчеркиванием означает, что идентификатор является закрытым.
Запуск идентификатора с двумя лидирующими символами подчеркивания означает строго частный идентификатор.
Если идентификатор также заканчивается двумя завершающими символами подчеркивания, идентификатор является специальным именем, определенным на языке.
Таким образом, вы код потерпит неудачу с 5()
, потому что dosn't заправить Python
именования/правила идентификаторов.
В противном случае, вы можете взломать код во что-то вроде этого:
class MyInt(int):
def __call__(self):
return self ** 2
int = MyInt
a = int('2')
print(a)
print(a())
print(int(3)())
# Note here the underscore '_'
_5 = int('3')
print(_5)
print(_5())
Выход:
2
4
9
3
9
Конечно можно с AST, не знаю об остальных. – Bharel
Только 5 всегда будут иметь встроенный тип 'int'. Когда вы пишете 'int = MyInt', вы не заменяете buildin' int'. Вы просто создаете локальный var. – Raz