Bug report
Noticed this while testing 3.12.0b4. While in my particular case I can work around it, it never the less is a change in behavior to 3.11.
classFixedIntType(int):
_signed: booldef__new__(cls, *args, **kwargs):
print(f"{cls}, {args=}")
returnsuper().__new__(cls, *args, **kwargs)
def__init_subclass__(cls, signed: int|None=None) ->None:
super().__init_subclass__()
ifsignedisnotNone:
cls._signed=signedif"__new__"notincls.__dict__:
cls.__new__=cls.__new__# <-- This line triggers the errorclassuint_t(FixedIntType, signed=False):
passclassCustomInt(uint_t):
def__new__(cls, value: int=0):
returnsuper().__new__(cls, value)
defwith_id(self, value: int):
returntype(self)(value)
CustomInt().with_id(1024)<class '__main__.CustomInt'>, args=(0,)
<class '__main__.CustomInt'>, args=(<class '__main__.CustomInt'>, 1024)
Traceback (most recent call last):
File "/.../cpython/test.py", line 26, in <module>
CustomInt().with_id(1024)
File "/.../cpython/test.py", line 24, in with_id
return type(self)(value)
^^^^^^^^^^^^^^^^^
File "/.../cpython/test.py", line 21, in __new__
return super().__new__(cls, value)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/.../cpython/test.py", line 6, in __new__
return super().__new__(cls, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: int() base must be >= 2 and <= 36, or 0
Without cls.__new__ = cls.__new__
<class '__main__.CustomInt'>, args=(0,)
<class '__main__.CustomInt'>, args=(1024,)
I bisected the issue to #103497.
/CC: @carljm
Your environment
- CPython versions tested on:
3.120b4 - Operating system and architecture: macOS ARM64
Linked PRs
Bug report
Noticed this while testing
3.12.0b4. While in my particular case I can work around it, it never the less is a change in behavior to3.11.Without
cls.__new__ = cls.__new__I bisected the issue to #103497.
/CC: @carljm
Your environment
3.120b4Linked PRs