mod_generics_cache.py 1.13 KB
Newer Older
1 2
"""Module for testing the behavior of generics across different modules."""

3 4 5
import sys
from textwrap import dedent
from typing import TypeVar, Generic, Optional
6 7


8 9 10 11
if sys.version_info[:2] >= (3, 6):
    exec(dedent("""
    default_a: Optional['A'] = None
    default_b: Optional['B'] = None
12

13
    T = TypeVar('T')
14 15 16


    class A(Generic[T]):
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
        some_b: 'B'


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

        my_inner_a1: 'B.A'
        my_inner_a2: A
        my_outer_a: 'A'  # unless somebody calls get_type_hints with localns=B.__dict__
    """))
else:  # This should stay in sync with the syntax above.
    __annotations__ = dict(
        default_a=Optional['A'],
        default_b=Optional['B'],
    )
    default_a = None
    default_b = None

    T = TypeVar('T')


    class A(Generic[T]):
        __annotations__ = dict(
            some_b='B'
        )


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

        __annotations__ = dict(
            my_inner_a1='B.A',
            my_inner_a2=A,
            my_outer_a='A'  # unless somebody calls get_type_hints with localns=B.__dict__
        )