Подсказка типа Pycharm, не использующая псевдоним. Импортируйте ZXY как XYZ. - PullRequest
0 голосов
/ 14 января 2019

У меня есть следующий код, и подсказка типа Pycharm не использует псевдоним, который я импортирую как:

from stripe.api_resources.list_object import ListObject as StripeListObject

Так что это определение функции def my_func_name(subscription: StripeListObject, ...): должно читаться my_func_name(subscription: StripeListObject, ... при просмотре всплывающей подсказки, но вместо этого читается my_func_name(subscription: ListObject, ...):

Любые идеи о том, почему это так, и как я могу заставить pycharm читать «псевдоним» при взгляде на подсказку типа?

1 Ответ

0 голосов
/ 15 января 2019

Согласно вашему импорту, ListObject и StripeListObject относятся к одному и тому же типу: они полностью взаимозаменяемы. Это означает, что если у вас есть какая-то функция, которая принимает StripeListObject, было бы совершенно правильно передать ListObject или наоборот. Обратите внимание, что это также верно во время выполнения: во время выполнения StripListObject просто просто переменная, которая ссылается на базовый класс ListObject: «имя» переменной не меняет поведения во время выполнения.

Вот почему PyCharm говорит, что тип это ListObject, когда вы наводите на него курсор: он смещается в сторону отображения исходного имени типа, а не псевдонима. Это хорошая вещь! Это помогает предотвратить случайное представление людей о том, что эти два типа различны (и отражает то, что происходит во время выполнения).

Я сильно подозреваю, что это поведение не настраивается: оно будет сбивающим с толку и, возможно, неправильным, если PyCharm будет вести себя как-то иначе.

Если вы хотите, чтобы PyCharm рассматривал ListObject и StripeListObject как два разных типа, вам нужно либо (a) создать новый класс с именем StripeListObject (который, возможно, наследуется от ListObject), либо ( б) сделать StripListObject a NewType вместо псевдонима.

...