@@ -26,8 +26,8 @@ from pygame.rect import FRect, Rect
2626from pygame .surface import Surface
2727from pygame .typing import Point , RectLike
2828
29- # non- generic Group, used in Sprite
30- _Group = AbstractGroup [ _SupportsSprite ]
29+ # generic Group, used in Sprite
30+ _TGroup = TypeVar ( "_TGroup" , bound = AbstractGroup )
3131
3232# define some useful protocols first, which sprite functions accept
3333# sprite functions don't need all sprite attributes to be present in the
@@ -50,7 +50,8 @@ class _HasRadiusAndRect(_HasRect, Protocol):
5050 radius : float
5151
5252# protocol helps with structural subtyping for typevars in sprite group generics
53- class _SupportsSprite (_HasImageAndRect , Protocol ):
53+ class _SupportsSprite (Generic [_TGroup ], _HasImageAndRect , Protocol ):
54+ def __class_getitem__ (cls , item : type [AbstractGroup ], / ) -> types .GenericAlias : ...
5455 @property
5556 def image (self ) -> Optional [Surface ]: ...
5657 @image .setter
@@ -63,17 +64,17 @@ class _SupportsSprite(_HasImageAndRect, Protocol):
6364 def layer (self ) -> int : ...
6465 @layer .setter
6566 def layer (self , value : int ) -> None : ...
66- def add_internal (self , group : _Group ) -> None : ...
67- def remove_internal (self , group : _Group ) -> None : ...
67+ def add_internal (self , group : _TGroup ) -> None : ...
68+ def remove_internal (self , group : _TGroup ) -> None : ...
6869 def update (self , * args : Any , ** kwargs : Any ) -> None : ...
69- def add (self , * groups : _Group ) -> None : ...
70- def remove (self , * groups : _Group ) -> None : ...
70+ def add (self , * groups : _TGroup ) -> None : ...
71+ def remove (self , * groups : _TGroup ) -> None : ...
7172 def kill (self ) -> None : ...
7273 def alive (self ) -> bool : ...
73- def groups (self ) -> list [_Group ]: ...
74+ def groups (self ) -> list [_TGroup ]: ...
7475
7576# also a protocol
76- class _SupportsDirtySprite (_SupportsSprite , Protocol ):
77+ class _SupportsDirtySprite (_SupportsSprite [ _TGroup ] , Protocol ):
7778 dirty : int
7879 blendmode : int
7980 source_rect : Union [FRect , Rect ]
@@ -83,7 +84,7 @@ class _SupportsDirtySprite(_SupportsSprite, Protocol):
8384 def _get_visible (self ) -> int : ...
8485
8586# concrete sprite implementation class
86- class Sprite (_SupportsSprite ):
87+ class Sprite (_SupportsSprite [ _TGroup ] ):
8788 @property
8889 def image (self ) -> Optional [Surface ]: ...
8990 @image .setter
@@ -96,18 +97,18 @@ class Sprite(_SupportsSprite):
9697 def layer (self ) -> int : ...
9798 @layer .setter
9899 def layer (self , value : int ) -> None : ...
99- def __init__ (self , * groups : _Group ) -> None : ...
100- def add_internal (self , group : _Group ) -> None : ...
101- def remove_internal (self , group : _Group ) -> None : ...
100+ def __init__ (self , * groups : _TGroup ) -> None : ...
101+ def add_internal (self , group : _TGroup ) -> None : ...
102+ def remove_internal (self , group : _TGroup ) -> None : ...
102103 def update (self , * args : Any , ** kwargs : Any ) -> None : ...
103- def add (self , * groups : _Group ) -> None : ...
104- def remove (self , * groups : _Group ) -> None : ...
104+ def add (self , * groups : _TGroup ) -> None : ...
105+ def remove (self , * groups : _TGroup ) -> None : ...
105106 def kill (self ) -> None : ...
106107 def alive (self ) -> bool : ...
107- def groups (self ) -> list [_Group ]: ...
108+ def groups (self ) -> list [_TGroup ]: ...
108109
109110# concrete dirty sprite implementation class
110- class DirtySprite (_SupportsDirtySprite ):
111+ class DirtySprite (Sprite [ _TGroup ], _SupportsDirtySprite [ _TGroup ] ):
111112 dirty : int
112113 blendmode : int
113114 source_rect : Union [FRect , Rect ]
0 commit comments