Refine the copy._SupportsReplace.__replace__ signature (#14786)

This commit is contained in:
Joren Hammudoglu
2025-09-30 20:27:11 +02:00
committed by GitHub
parent 250bf77292
commit 91055c730f
2 changed files with 24 additions and 6 deletions
+18
View File
@@ -2,6 +2,7 @@ from __future__ import annotations
import copy
import sys
from typing import Generic, TypeVar
from typing_extensions import Self, assert_type
@@ -19,3 +20,20 @@ if sys.version_info >= (3, 13):
obj = ReplaceableClass(42)
cpy = copy.replace(obj, val=23)
assert_type(cpy, ReplaceableClass)
_T_co = TypeVar("_T_co", covariant=True)
class Box(Generic[_T_co]):
def __init__(self, value: _T_co, /) -> None:
self.value = value
def __replace__(self, value: str) -> Box[str]:
return Box(value)
if sys.version_info >= (3, 13):
box1: Box[int] = Box(42)
box2 = copy.replace(box1, val="spam")
assert_type(box2, Box[str])