Переопределите атрибут класса типа универсального типа с помощью примеси, чтобы mypy не сообщал, что он несовместим.Python

Программы на Python
Anonymous
Переопределите атрибут класса типа универсального типа с помощью примеси, чтобы mypy не сообщал, что он несовместим.

Сообщение Anonymous »

У меня есть универсальный базовый класс A, атрибут которого содержит универсальный тип TK.

Код: Выделить всё

import typing

class K1:
pass

TK = typing.TypeVar("TK", bound=K1)

class A(typing.Generic[TK]):
k: type[TK]
Затем у меня есть миксин B, который следует применить к нему в сочетании с определенным TK, которым является K1.

Код: Выделить всё

class B:
k = K1
Затем я пытаюсь применить его к A следующим образом:

Код: Выделить всё

class AB(B, A[K1]):
pass
Код работает, но mypy жалуется:

ошибка: определение «k» в базовом классе «B» несовместимо с определением в базовом классе "A"

Проблема не возникнет при прямом наследовании и выполнении того же присваивания:

Код: Выделить всё

class C(A[K1]):
k = K1
Есть ли способ сделать миксин совместимым с A[K1]? Примечательно, что проблемы не возникнет, если A.k не помечен переменной типа, поэтому я нахожу это немного странным.


Подробнее здесь: https://stackoverflow.com/questions/773 ... o-mypy-won

Вернуться в «Python»