Почему PyCharm не может найти ссылку при наборе Союз двух классов - PullRequest
0 голосов
/ 20 марта 2020

Подсветка PyCharm: "не удается найти ссылку 'object_var' в 'Foo | Bar'

Нет выделения с 'class_var'. Код работает нормально, без ошибок.

from typing import Union, Type


class Foo:
    class_var = "fo"

    def __init__(self):
        self.object_var = "o"


class Bar:
    class_var = "ba"

    def __init__(self):
        self.object_var = "r"


def foo_bar(file_object: Union[Type[Foo], Type[Bar]]):

    class_var = file_object.class_var
    object_var = file_object.object_var

    return class_var, object_var

код с выделенной частью

1 Ответ

0 голосов
/ 23 марта 2020

Type[Foo] описывает определение класса, которое наследует Foo или Foo, само это объявление не относится к экземплярам, ​​см. https://www.python.org/dev/peps/pep-0484/#the -type-of-class-objects .

Поскольку object_var является переменной экземпляра в обоих случаях, PyCharm правильно выдает предупреждение.

Какая польза от foo_bar? Я полагаю, подсказка типа должна быть file_object: Union[Foo, Bar].

...