Как объявить тип dict, содержащий классы

Я собираюсь объявить тип следующего параметра функции с модулем typing:

import typing


class A(object):
    pass

class B(A):
    pass

class C(B):
    pass

def my_func(p: typing.Dict[A, str]) -> None:
    pass

my_func({C: 'foo'})

Параметр p для my_func должен быть dict с дочерним классом A в качестве ключа и str в качестве значения. Фактическая запись не выполняется с проверкой mypy:

example.py:17: ошибка: элемент списка 0 имеет несовместимый тип "Tuple [C, str]"

Как объявить тип p с набором текста?


person bux    schedule 24.01.2017    source источник


Ответы (1)


Код использует в качестве ключа сам класс C, а не экземпляр C.

my_func({C: 'foo'})

Передача экземпляра класса C должна быть в порядке.

my_func({C(): 'foo'})
         ^^^--- instance, not a class itself

Если вам действительно нужно передать сам класс (я в этом сомневаюсь), вам нужно использовать _ 5_:

typing.Dict[typing.Type[A], str]
            ^^^^^^^^^^^^^^
person falsetru    schedule 24.01.2017
comment
Спасибо. Примечание: мне действительно нужно передать сам класс. - person bux; 24.01.2017