class ProUser(User): ...
        class TeamUser(User): ...
    And a function that takes a class argument that's a subclass of
    User and returns an instance of the corresponding class::
        U = TypeVar('U', bound=User)
        def new_user(user_class: Type[U]) -> U:
            user = user_class()
            # (Here we could write the user object to a database)
            return user
        joe = new_user(BasicUser)
    At this point the type checker knows that joe has type BasicUser.
    """
@runtime_checkable
class SupportsInt(Protocol):
    """An ABC with one abstract method __int__."""
    __slots__ = ()
    @abstractmethod
    def __int__(self) -> int:
        pass
@runtime_checkable
class SupportsFloat(Protocol):
    """An ABC with one abstract method __float__."""
    __slots__ = ()
    @abstractmethod
    def __float__(self) -> float:
        pass
@runtime_checkable
class SupportsComplex(Protocol):
    """An ABC with one abstract method __complex__."""
    __slots__ = ()
    @abstractmethod
    def __complex__(self) -> complex:
        pass
@runtime_checkable
class SupportsBytes(Protocol):
    """An ABC with one abstract method __bytes__."""
    __slots__ = ()
    @abstractmethod
    def __bytes__(self) -> bytes:
        pass
@runtime_checkable
class SupportsIndex(Protocol):
    """An ABC with one abstract method __index__."""
    __slots__ = ()
    @abstractmethod
    def __index__(self) -> int:
        pass
@runtime_checkable
class SupportsAbs(Protocol[T_co]):