You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.1 KiB
Python
54 lines
1.1 KiB
Python
3 weeks ago
|
"""Module for testing the behavior of generics across different modules."""
|
||
|
|
||
|
import sys
|
||
|
from textwrap import dedent
|
||
|
from typing import TypeVar, Generic, Optional
|
||
|
|
||
|
|
||
|
if sys.version_info[:2] >= (3, 6):
|
||
|
exec(dedent("""
|
||
|
default_a: Optional['A'] = None
|
||
|
default_b: Optional['B'] = None
|
||
|
|
||
|
T = TypeVar('T')
|
||
|
|
||
|
|
||
|
class A(Generic[T]):
|
||
|
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__
|
||
|
)
|