Утиный набор текста на обычной букве TPython

Программы на Python
Anonymous
Утиный набор текста на обычной букве T

Сообщение Anonymous »

Я хочу внедрить некоторое поведение в GenericClass на основе назначенного ему универсального класса. Ожидается, что тип T будет иметь метод класса validate, который выполняет некоторую проверку.
LiveDemo

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

from typing import Generic, TypeVar

T = TypeVar("T")

class GenericClass(Generic[T]):
def __init__(self):
pass

def perform_validation(self):
T.validate()

class StaticObj:
@classmethod
def validate(cls):
print("Validate called for {StaticObj.name}")

mygeneric = GenericClass[StaticObj]()
mygeneric.perform_validation()
Я думал, что теперь можно просто уклониться от ввода T.validate, но Python кричит на меня:

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

Program returned: 1
Traceback (most recent call last):
File "/app/output.s", line 21, in 
mygeneric.perform_validation()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/app/output.s", line 10, in perform_validation
T.validate()
^^^^^^^^^^
AttributeError: 'typing.TypeVar' object has no attribute 'validate'
По моему опыту работы с другими языками программирования, подобные вещи возможны. Что я делаю неправильно? Есть ли способ заставить его работать так, как я задумал?

Подробнее здесь: https://stackoverflow.com/questions/798 ... -generic-t

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