I want to shadow Python's int
class, but I am having trouble with __init__
.
The following code seems to work fine:
import builtins
class int(int):
"""Shadow Python builtin int class."""
def __init__(self, x, base=10, *, my_attr=False):
self.my_attr = my_attr
builtins.int.__init__(x, base)
But if I replace the line builtins.int.__init__(x, base)
to either super().__init__(x, base)
or builtins.int.__init__(self, x, base)
(which I think is the same as using super()
), it doesn't work. I will get the following error:
a = int(5)
TypeError: object.__init__() takes exactly one argument (the instance to initialize)
I also tried super().__init__()
(and builtins.int.__init__()
) and they both would work as well. I am a bit confused because the int
class in builtins.py
is defined as (according to PyCharm):
def __init__(self, x, base=10): # known special case of int.__init__
which takes at least one argument x
.
Can someone explain the inheritance in this case?