Типизация объекта класса в Python

У меня есть класс User и я сделал функцию, которая на вход принимает объект этого класса, вопрос как типизировать этот аргумент

class User:
    def __init__(self, *args): ...
    def something(self, user: ?): ...

Если поставить туда User то Python скажет:

NameError: name 'User' is not defined

Подскажите пожалуйста что делать? Заранее спасибо!


Ответы (1 шт):

Автор решения: n1tr0xs

Вот несколько вариантов:

  1. __future__:
from __future__ import annotations

class User:
    def __init__(self, *args): ...
    def something(self, user: User): ...
  1. typing
from typing import TypeVar

t = TypeVar('User', bound='User')

class User:
    def __init__(self, *args): ...
    def something(self, user: t): ...
  1. Просто строки:
class User:
    def __init__(self, *args): ...
    def something(self, user: 'User'): ...

Я бы рекомендовал использовать __future__, потому что он был запланирован как стандартное включение, но пока что релиз в стандарт отложили дважды.

→ Ссылка