Я хотел бы использовать новый синтаксис подписи универсального типа Python 3.12, чтобы узнать тип класса, экземпляр которого будет создан, в
методе класса этого класса.
/>Например, в этом примере я хотел бы напечатать конкретный тип T:
Код: Выделить всё
class MyClass[T]:
kind: type[T]
...
@classmethod
def make_class[T](cls) -> "MyClass[T]":
print("I am type {T}!")
return cls()
Я использовал совет из следующего вопроса StackOverflow, чтобы сделать это для подтверждения типа как в __new__, так и в __init__, но мне еще предстоит выяснить это умный способ сделать это с помощью статического метода или метода класса (в идеале метода класса).
- Базовый класс Generic[T] – как получить тип T изнутри экземпляра?
Моя цель — иметь следующий API:
Код: Выделить всё
>>> MyClass[int].make_class()
"I am type int!"
Или этот API (который, я думаю, пока синтаксически невозможен):
Код: Выделить всё
>>> MyClass.make_class[int]()
"I am type int!"
В любом случае возвращаемый экземпляр будет иметь int, привязанный к переменной класса, чтобы я мог использовать его позже.
Код: Выделить всё
MyClass[int].make_class().kind is int == True
Я открыт для «хаков» (включая интенсивное использование проверки).
Подробнее здесь:
https://stackoverflow.com/questions/783 ... ython-3-12