Как правильно создать экземпляр объявления типа TypeVar со связанной переменной?Python

Программы на Python
Anonymous
Как правильно создать экземпляр объявления типа TypeVar со связанной переменной?

Сообщение Anonymous »

Проблема, с которой я столкнулся, заключается в том, что я пытаюсь использовать объявления ORM SQLAlchelmy для написания запросов сеанса и использую распознавание типов классов VSCode для автоматического завершения моих закодированных запросов.
На основе насколько я понимаю, я закодировал объявление TypeVar в следующем формате:

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

import sqlalchemy
from sqlalchemy.orm import sessionmaker
from typing import TypeVar

def generate_schema(prefix: str):
class SchemaA:
tablename: str = f"{prefix}_table"
attr1: int = len(prefix)
return SchemaA

SchemaA = generate_schema("raw")
SchemaAType = TypeVar("SchemaAType", bound=SchemaA)

engine = sqlalchemy.create_engine("xxx")
Session = sessionmaker(engine)

with Session() as sess:
table_a: SchemaAType = sess.query(SchemaA).where(SchemaA.attr1 == 3).first()

prefix_perc: float = table_a.attr1 / len(table_a.tablename)
Раньше он мог работать правильно, и VSCode также сможет успешно сопоставлять внутренние атрибуты SchemaA (поскольку это объект класса), но недавно table_a: SchemaAType выдает ошибку проверки: «Переменная не разрешена в выражении типа».
Более того, table_a также больше не распознается внутренними атрибутами SchemaA< /code> переменная.
Что я сейчас делаю не так? Кажется, я не могу найти в Интернете ответ на эту ошибку форматирования, несмотря на то, что она не выдает никаких ошибок во время выполнения.
Я пробовал использовать вместо этого другие типы Var, такие как NewType, но на основе документации, они не предназначены для привязки переменных к типированию.
В идеале я бы хотел избежать определения общего класса для SchemaA, чтобы можно было централизовать определение SchemaA в одна функция.
Мои текущие спецификации Python:

python 3.10.6

typing-extensions==4.9.0

Подробнее здесь: https://stackoverflow.com/questions/789 ... d-variable

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