Я считаю, что псевдонимы типов и обычные типы неразличимы по дизайну: псевдонимы типов предназначены для точного замещения любого типа, к которому они относятся.
Таким образом, для использования вашего примера не обязательно имеет значение, является ли MyComplexObject
фактическим классом или псевдонимом типа: они оба ведут себя одинаково во время выполнения и статической проверки типов.
И поскольку средство проверки типов может дать вам немедленную обратную связь о том, используете ли вы obj
безопасным для типов способом, у вас есть минимальные возможности запутаться: либо вы будете использовать параметр obj
правильно иначе вы получите немедленный отзыв. (И аналогично, такие IDE, как Pycharm, которые понимают семантику PEP 484, также будут понимать псевдонимы типов и будут корректно автоматически заполнять / отмечать ошибки.)
Стоит также отметить, что в случае, когда вы специально присваиваете псевдоним другим классам, псевдоним и исходный класс буквально неразличимы во время выполнения: они обе переменные, которые ссылаются на один и тот же объект базового типа. (Так что, возможно, в этом нет ничего сложного: и псевдоним, и исходный тип - это «одно и то же».)
Следовательно, было очень мало стимулов найти соглашение об именах для различения типов и псевдонимов типов - на самом деле это не является проблемой на практике.
Тем не менее, - это некоторые неявные соглашения о том, когда использовать псевдонимы типа. Например, люди обычно не используют псевдонимы классов напрямую: псевдонимы типов, как сказал Итан, в основном предназначены для упрощения составных типов больших размеров, которые повторяются в нескольких местах.
Это означает, что псевдонимы типов в основном используются, когда в противном случае у вас была бы куча действительно уродливых сигнатур типов. Затем это становится «компромиссным» видом: читателю действительно нужно тратить время на поиск определения псевдонима и кэшировать его в своей голове, но как только они это сделают, чтение остальной части кода должно быть намного приятнее.
Так что, если вы все еще находите псевдонимы типов потенциально запутанными и предпочитаете избегать их использования без необходимости, это прекрасно: это то, что в большинстве случаев делают все остальные. Единственная разница сводится к тому, когда вы пересекаете этот переломный момент от «ненужного» к «необходимому».