mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 02:15:10 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			87 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from __future__ import annotations
 | |
| from typing import Callable, Unpack
 | |
| 
 | |
| 
 | |
| class A[T, *Ts, **P]:
 | |
|     x: T
 | |
|     y: tuple[*Ts]
 | |
|     z: Callable[P, str]
 | |
| 
 | |
| 
 | |
| class B[T, *Ts, **P]:
 | |
|     T = int
 | |
|     Ts = str
 | |
|     P = bytes
 | |
|     x: T
 | |
|     y: Ts
 | |
|     z: P
 | |
| 
 | |
| 
 | |
| Eggs = int
 | |
| Spam = str
 | |
| 
 | |
| 
 | |
| class C[Eggs, **Spam]:
 | |
|     x: Eggs
 | |
|     y: Spam
 | |
| 
 | |
| 
 | |
| def generic_function[T, *Ts, **P](
 | |
|     x: T, *y: Unpack[Ts], z: P.args, zz: P.kwargs
 | |
| ) -> None: ...
 | |
| 
 | |
| 
 | |
| def generic_function_2[Eggs, **Spam](x: Eggs, y: Spam): pass
 | |
| 
 | |
| 
 | |
| class D:
 | |
|     Foo = int
 | |
|     Bar = str
 | |
| 
 | |
|     def generic_method[Foo, **Bar](
 | |
|         self, x: Foo, y: Bar
 | |
|     ) -> None: ...
 | |
| 
 | |
|     def generic_method_2[Eggs, **Spam](self, x: Eggs, y: Spam): pass
 | |
| 
 | |
| 
 | |
| # Eggs is `int` in globals, a TypeVar in type_params, and `str` in locals:
 | |
| class E[Eggs]:
 | |
|     Eggs = str
 | |
|     x: Eggs
 | |
| 
 | |
| 
 | |
| 
 | |
| def nested():
 | |
|     from types import SimpleNamespace
 | |
|     from inspect import get_annotations
 | |
| 
 | |
|     Eggs = bytes
 | |
|     Spam = memoryview
 | |
| 
 | |
| 
 | |
|     class F[Eggs, **Spam]:
 | |
|         x: Eggs
 | |
|         y: Spam
 | |
| 
 | |
|         def generic_method[Eggs, **Spam](self, x: Eggs, y: Spam): pass
 | |
| 
 | |
| 
 | |
|     def generic_function[Eggs, **Spam](x: Eggs, y: Spam): pass
 | |
| 
 | |
| 
 | |
|     # Eggs is `int` in globals, `bytes` in the function scope,
 | |
|     # a TypeVar in the type_params, and `str` in locals:
 | |
|     class G[Eggs]:
 | |
|         Eggs = str
 | |
|         x: Eggs
 | |
| 
 | |
| 
 | |
|     return SimpleNamespace(
 | |
|         F=F,
 | |
|         F_annotations=get_annotations(F, eval_str=True),
 | |
|         F_meth_annotations=get_annotations(F.generic_method, eval_str=True),
 | |
|         G_annotations=get_annotations(G, eval_str=True),
 | |
|         generic_func=generic_function,
 | |
|         generic_func_annotations=get_annotations(generic_function, eval_str=True)
 | |
|     )
 | 
