Skip to main content

A package to determine the values of generic classes through instances or subclasses

Project description

Python-Generics

Unittests status badge Coverage status badge Linting status badge Black status badge

This package provides functionalities to determine the values of generic type variables in Python. As of now, it only supports two functions: get_type_vars and get_filled_type. These functions work also with pydantic generic models (only tested with pydantic > v2.3.0).

Installation

The package is available on PyPI:

pip install python-generics

Usage

The get_type_vars function returns a tuple of all type variables for a given generic type. The TypeVars are determined by Generic if the type is a subclass of Generic. Otherwise, they are determined by the indexed supertypes (the order of the returned tuple is the lexicographical in the list of the supertypes).

from typing import Generic, TypeVar
from generics import get_type_vars

T = TypeVar("T")
U = TypeVar("U")
V = TypeVar("V")

class A(Generic[T, U]):
    pass

class B(A[T, U], Generic[U, T]):
    pass

class C(B[T, U], A[T, V]):
    pass

assert get_type_vars(A) == (T, U)
assert get_type_vars(B) == (U, T)
assert get_type_vars(C) == (T, U, V)

The get_filled_type function determines for a single TypeVar the value if defined somewhere. To determine the value, you have to pass a type or an instance of a type that is a subclass of a generic type of which you want to determine the value of the TypeVar.

Instead of supplying the TypeVar itself, you can define the integer position of the TypeVar in the tuple of TypeVars of the generic type.

from typing import Generic, TypeVar
from generics import get_filled_type

T = TypeVar("T")
U = TypeVar("U")
V = TypeVar("V")

class A(Generic[T, U]):
    pass

class B(A[str, U]):
    pass

assert get_filled_type(A[str, U], A, T) == str
assert get_filled_type(B[int](), A, 0) == str

The get_filled_type function is especially useful if you have generic super types in which you want to determine the value of a TypeVar inside methods.

from typing import Generic, TypeVar, Any
from generics import get_filled_type

T = TypeVar("T")

class MySuperType(Generic[T]):
    def get_type(self) -> Any:
        return get_filled_type(self, MySuperType, 0)

class MySubType(MySuperType[str]):
    pass

assert MySubType().get_type() == str

How to use this Repository on Your Machine

Follow the instructions in our Python template repository.

Contribute

You are very welcome to contribute to this template repository by opening a pull request against the main branch.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_generics-0.0.2.tar.gz (11.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

python_generics-0.0.2-py3-none-any.whl (5.6 kB view details)

Uploaded Python 3

File details

Details for the file python_generics-0.0.2.tar.gz.

File metadata

  • Download URL: python_generics-0.0.2.tar.gz
  • Upload date:
  • Size: 11.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for python_generics-0.0.2.tar.gz
Algorithm Hash digest
SHA256 253572e9f19d512c654219acca56f5bebee7872d1b5e341c8e032d3360d9f770
MD5 b6e5ba07b684422f441eeae66ddadf7d
BLAKE2b-256 0b77d8d825c85d71d7507096d308866c14a6a4f71559a301a397bcf25fc6743d

See more details on using hashes here.

File details

Details for the file python_generics-0.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for python_generics-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8db8dea7a9c795424225c2e42cf9776ce038e841918b04a7988d284aa6910656
MD5 7575e5e53d4f081049790b70d9bb0975
BLAKE2b-256 e56d36b7cd9adfea77e6f1e52734508c67dc4c3032ea036c37aeb0b0627cdb0f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page