(original) (raw)

IMO bool is a special case because it's meant to be a final class, and the implementation of int (which is in C and so can violate most rules) doesn't respect that.

But in general I think the only reasonable approach is that a construction class method should return an instance of the subclass; these class methods have a signature that's constrained by their signature in the base class.

OTOH operators like \_\_add\_\_ cannot be expected to return an instance of the subclass, because these typically construct an instance using \_\_new\_\_/\_\_init\_\_, whose signatures are \*not\* constrained by the base class.