На основе насколько я понимаю, я закодировал объявление 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)
Более того, 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