Inheritance when __new__() doesn't return instance of class
When __new__ return instance of class, everything is ok, we can create subclass with no problems: class A: def __new__(cls, p1, p2): self = object.__new__(cls) return self def __init__(self, p1, p2): self.p1 = p1 self.p2 = p2 class B(A): def __new__(cls, p3): self = super().__new__(cls, 1, 2) return self def __init__(self, p3): super().__init__(1, 2) self.p3 = p3 a = A(1, 2) print(a.p2) # output: 2 b = B(3) print(b.p3) # output: 3 But, If __new__() does not return an instance of cls , then the new instance’s __init__() method will not be invoked. Looks like we have to call __init__() inside _