ПРОСТО МОЕ правильное МНЕНИЕ действительно правильное мнение. Я не могу сказать, почему Гвидо сделал это так, но я могу сказать, почему я рад, что он сделал.
Я могу посмотреть на код и сразу узнать , если какое-то выражение обращается к клавише 'b' в объекте, похожем на диктовку a
, атрибут 'b' на объекте a
, вызываемый метод или индекс b
в последовательности a
.
Python не должен пробовать все вышеперечисленные опции каждый раз, когда происходит поиск атрибута . Представьте, что каждый раз, когда один индексируется в списке, Python должен был сначала попробовать три других варианта. Список интенсивных программ перетянет. Python достаточно медленный!
Это означает, что когда я пишу код, я должен знать, что я делаю. Я не могу просто бросать объекты и надеяться, что где-нибудь получу информацию как-то. Я должен знать, что я хочу найти ключ, получить доступ к атрибуту, индексировать список или вызвать метод. Мне это нравится, потому что помогает мне ясно мыслить о коде, который я пишу. Я знаю, на что ссылаются идентификаторы и какие атрибуты и методы я ожидаю, что объект этих ссылок будет поддерживать.
Конечно, Гвидо Ван Россум, возможно, только что подбросил монету за все, что я знаю (он, вероятно, не знал), так что вам придется спросить его самого, если вы действительно хотите знать.
Что касается вашего комментария о необходимости окружать эти вещи блоками try
, это, вероятно, означает, что вы не пишете очень надежный код. Как правило, вы хотите, чтобы ваш код ожидал получить некоторую информацию от объекта, похожего на диктовку, объекта, подобного списку, или обычного объекта. Вы должны знать, каким образом это будет происходить, и позволить чему-либо еще вызвать исключение.
Исключением является то, что можно сопоставлять доступ к атрибутам и вызовы методов, используя декоратор property
и более общие дескрипторы. Это хорошо, только если метод не принимает аргументы.