TGViewer
Zen of Python Zen of Python @zen_of_python · 18.8K subscribers
Post #4094 2.27K
Вопрос подписчика

Задает @levisserena:

Всем привет. Помогите разобраться с TypeVar
Один из соразработчиков указал что-то типа того (упрощу, но не всё, чтоб картина была):



from typing import TypeVar
from uuid import UUID

from sqlalchemy.ext.asyncio import AsyncSession

ModelType = TypeVar('ModelType')


class CRUDBase(Generic[ModelType]):


def __init__(self, model: Type[ModelType]):
"""
Инициализирует CRUD-класс с указанной моделью.

Параметры:
model: SQLAlchemy-модель (класс), связанный с таблицей в БД.
"""
self.model = model

async def get(self, session: AsyncSession, obj_id: int | str | UUID) -> ModelType | None:
"""
Получает объект по ID (int, str или UUID).

Возвращает объект модели или None, если он не найден.
"""
result = await session.execute(select(self.model).where(self.model.id == obj_id))
return result.scalars().first()


Вопрос к строке result = await session.execute(select(self.model).where(self.model.id == obj_id)), а точнее к self.model.id.

Линтер подчеркивает это
self.model.id, мол нет у него атрибута id ("type[ModelType]" has no attribute "id").

Как быть? Есть ли способ, обойтись малой кровью, и указать, что id или любой другой атрибут есть? Ну или как это делать по правильному.

NB! Пожалуйста, будьте взаимовежливы. Однажды и вам помогут в этой рубрике.

#обсуждение

@zen_of_python
More from @zen_of_python
  1. Sep 29, 2026Как битовые множества сокращают память моделей Pydantic Explicit is better than implicit,…
  2. Sep 29, 2026Как проверять плагины через контракт Pydantic и FastAPI Сервис может отвечать по нужным ад…
  3. Sep 29, 2026Как OpenBLAS ускоряет NumPy в браузере Раньше браузерная сборка NumPy выполняла np.matmul…
  4. Sep 28, 2026partial или lambda: как специализировать колбэк без сюрпризов functools.partial заранее св…
  5. Sep 28, 2026Как коллизии превращают построение set в Python в квадратичную задачу Привычное O(1) для s…
  6. Sep 28, 2026Как проверять инварианты Python-кода с Hypothesis Обычный тест фиксирует конкретный ввод и…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →