Мегакрендель: заколебарь, жаболекарь, зомболекарь, лежебокарь
Могут ли быть в интерпретаторе пайтона какие-то неожиданные эффекты от одного лишь печатания строчки кода, без попытки её исполнить?
Замечательная IPython QtConsole в процессе печатания даёт пользователю подсказки — например, показывает докстринг и тип вызываемого объекта, ну и ещё некоторые данные запрашивает. Она рассчитывает, что объект их ей сам добровольно скажет. Ну а если нет?
Пусть кто-нибудь, не предупредив нас, определил следующий код (или более заковыристый, потому что жизнь не мармелад):
class M(type):
def __getattr__(self, name):
print("Aaaа!")
class N(metaclass = M): pass
И вот мы вбиваем: N(
На энтер, заметим, не жмём.
Консоль по открытой скобочке понимает, что N, похоже, сейчас захотят вызвать, вострит уши, принюхивается...
...Ничем хорошим это, конечно, не кончается.
Замечательная IPython QtConsole в процессе печатания даёт пользователю подсказки — например, показывает докстринг и тип вызываемого объекта, ну и ещё некоторые данные запрашивает. Она рассчитывает, что объект их ей сам добровольно скажет. Ну а если нет?
Пусть кто-нибудь, не предупредив нас, определил следующий код (или более заковыристый, потому что жизнь не мармелад):
class M(type):
def __getattr__(self, name):
print("Aaaа!")
class N(metaclass = M): pass
И вот мы вбиваем: N(
На энтер, заметим, не жмём.
Консоль по открытой скобочке понимает, что N, похоже, сейчас захотят вызвать, вострит уши, принюхивается...
...Ничем хорошим это, конечно, не кончается.
@темы: root@глупыйпингвин:~#