Skip to content
46 changes: 33 additions & 13 deletions stdlib/_ctypes.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -195,24 +195,44 @@ class CFuncPtr(_PointerLike, _CData, metaclass=_PyCFuncPtrType):
_GetT = TypeVar("_GetT")
_SetT = TypeVar("_SetT")

# This class is not exposed. It calls itself _ctypes.CField.
@final
@type_check_only
class _CField(Generic[_CT, _GetT, _SetT]):
offset: int
size: int
if sys.version_info >= (3, 10):
if sys.version_info >= (3, 14):
@final
@type_check_only
class _CField(Generic[_CT, _GetT, _SetT]):
offset: int
size: int
name: str
type: type[_CT]
byte_offset: int
byte_size: int
is_bitfield: bool
bit_offset: int
bit_size: int
is_anonymous: bool
@overload
def __get__(self, instance: None, owner: type[Any] | None = None, /) -> Self: ...
@overload
def __get__(self, instance: Any, owner: type[Any] | None = None, /) -> _GetT: ...
else:
@overload
def __get__(self, instance: None, owner: type[Any] | None, /) -> Self: ...
@overload
def __get__(self, instance: Any, owner: type[Any] | None, /) -> _GetT: ...

def __set__(self, instance: Any, value: _SetT, /) -> None: ...
def __set__(self, instance: Any, value: _SetT, /) -> None: ...
else:
@final
@type_check_only
class _CField(Generic[_CT, _GetT, _SetT]):
offset: int
size: int
if sys.version_info >= (3, 10):
@overload
def __get__(self, instance: None, owner: type[Any] | None = None, /) -> Self: ...
@overload
def __get__(self, instance: Any, owner: type[Any] | None = None, /) -> _GetT: ...
else:
@overload
def __get__(self, instance: None, owner: type[Any] | None, /) -> Self: ...
@overload
def __get__(self, instance: Any, owner: type[Any] | None, /) -> _GetT: ...

def __set__(self, instance: Any, value: _SetT, /) -> None: ...

# This class is not exposed. It calls itself _ctypes.UnionType.
@type_check_only
Expand Down
3 changes: 3 additions & 0 deletions stdlib/ctypes/__init__.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ if sys.version_info >= (3, 14):
else:
from _ctypes import POINTER as POINTER, pointer as pointer

if sys.version_info >= (3, 14):
CField = _CField

DEFAULT_MODE: Final[int]

class ArgumentError(Exception): ...
Expand Down
Loading