Ethan Furman wrote:
This leads to another question: we've now seen two examples where (presumably) the internal type field and __class__ differ. In the weakproxy case, type(obj) returns the internal type field. In the "regular" case, where you set obj.__class__ to a class, type(obj) returns the new (external) type. How the hell does it decide which one to return?
When you set the __class__ of a regular object and it succeeds, it actually changes the internal type, i.e. obj->ob_type at the C level. This is only allowed under certain conditions. Mostly only for user-defined classes, and only if the layouts of the old and new instance structs are compatible. -- Greg -- https://mail.python.org/mailman/listinfo/python-list