Message 189118 - Python tracker
> In case this logic is flawed, we know that when remove_subclass() is > called, exactly one child is removed. Whether it is us, or some > previous class, is irrelevant. remove_subclass() is called when __bases__ is assigned to, so it is not irrelevant: >>> class A: pass ... >>> class B(A): pass ... >>> class C: pass ... >>> A.__subclasses__() [<class '__main__.B'>] >>> B.__bases__ = C, >>> A.__subclasses__() [] >>> C.__subclasses__() [<class '__main__.B'>]