Как определить метакласс, который создает распознаваемый аннотациями подкласс определенного класса?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как определить метакласс, который создает распознаваемый аннотациями подкласс определенного класса?

Сообщение Anonymous »

Проблема
Я создал такой базовый класс

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

from abc import ABCMeta
class EGNode(metaclass = ABCMeta):
name: str
depends: type["EGNode"] = set()
def update_graph(graph: ErrorGraph) -> int:
return 0
Теперь я хотел бы определить метакласс tENode.
Когда класс создается с помощью tENode, я надеюсь получить подкласс EGNode без дополнительного кодирования для наследования.
Более того, наследование должно быть распознаваемым при вводе текста и аннотациях.

Например, когда я создаю класс под названием Node с tENode, я надеюсь, что VSCode сможет распознать Node.update_graph(...) как статический метод EGNode.update_graph(...) и дать моим коллегам подсказки по связанному типу функции.

Что я пробовал
Подобный метакласс легко создать с неоднозначными аннотациями и типизацией, как и коды ниже

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

class tENode(Generic[T], ABCMeta): # just ignore the Generic
def __new__(cls, name, bases, dct):
if EGNode not in bases:
bases += (EGNode, )
return ABCMeta.__new__(cls, name, bases, dct)
но очевидно, что такие IDE, как VSCode, не могут распознавать классы, созданные tENode выше.
Я также пытался решить эту проблему, добавив type[EGNode] в качестве родительского класса tENode, но не удалось.

Возможные решения и дополнительные требования
  • Метакласс неизбежен в моем проекте. Причина в том, что tENode[...] используется как «подкласс» типа [EGNode] чья родовая часть () может сообщать тип возвращаемого значения переопределенного EGNode.update_graph(...) в моем дальнейшем кодировании (возвращенное int приведено только в качестве примера).
  • Возможным решением может быть вложенный класс, а вложение EGNode в tENode допустимо.
  • Нет проверок например, mypy будет использоваться, типизация и аннотации в проекте предназначены только для подсказок в IDE, например VSCode.


Подробнее здесь: https://stackoverflow.com/questions/791 ... ass-of-spe
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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