Использование подсказок типа для обозначения подкласса нескольких классов, например `typing.Intersection`?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Использование подсказок типа для обозначения подкласса нескольких классов, например `typing.Intersection`?

Сообщение Anonymous »

Я ищу, но не могу найти краткий способ обозначения подсказки типа obj: «подкласс A и B». Подсказка типа obj: typing.Union[A, B] не охватывает этот случай, поскольку она принимает экземпляр A или B или любого из их подклассов.Я пишу протокол, который может быть реализован классами.
Этот интерфейс имеет метод __eq__, который может сравнивать несколько экземпляров одного и того же класса, реализующего этот протокол. Реализуя этот протокол, классы получают реализацию метода __eq__ по умолчанию.

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

import typing

@typing.runtime_checkable
class MyInterface(typing.Protocol):

def __eq__(o1, o2) -> bool:
''' checks if `o1` and `o2` are equal to one another '''
from random import randint
return bool(randint(0,1)) # TODO: write a better implementation

...
Я хочу добавить подсказки типов, чтобы обозначить, что 1. оба объекта __eq__ должны быть экземплярами одного и того же класса и 2. должны реализовывать MyProtocol .
Вот что я рассмотрел:
  • Можно определить переменную типа следующим образом: T = typing.TypeVar('T') и используйте это в подписи:

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

def __eq__(o1: T, o2: T) -> bool:
Однако это не требует реализации MyProtocol.
  • Вместо этого я мог бы подробно рассказать о протоколе :

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

def __eq__(o1: 'MyProtocol', o2: 'MyProtocol') -> bool:
Однако это не мешает статическим типам представлять собой две разные иерархии классов без общей структуры, которые оба реализуют протокол (например, BankAccount реализует HasOpen и Door реализует HasOpen).
Как можно этого добиться?

Подробнее здесь: https://stackoverflow.com/questions/718 ... intersecti
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Метод Python `typing.cast` против подсказок типа двоеточия
    Anonymous » » в форуме Python
    0 Ответы
    46 Просмотры
    Последнее сообщение Anonymous
  • Метод Python `typing.cast` против подсказок типа двоеточия
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Метод Python `typing.cast` против подсказок типа двоеточия
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Подсказки по типам Python: typing.Mapping и typing.Dict
    Anonymous » » в форуме Python
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Подсказки по типам Python: typing.Mapping и typing.Dict
    Anonymous » » в форуме Python
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous

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