Переопределите атрибут класса типа универсального типа с помощью примеси, чтобы 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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