8000 Allow update `__class__` for module subclasses · RustPython/RustPython@e17f303 · GitHub
[go: up one dir, main page]

Skip to content

Commit e17f303

Browse files
committed
Allow update __class__ for module subclasses
1 parent 8c7b811 commit e17f303

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

vm/src/builtins/object.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,10 @@ impl PyBaseObject {
281281

282282
#[pygetset(name = "__class__", setter)]
283283
fn set_class(instance: PyObjectRef, value: PyObjectRef, vm: &VirtualMachine) -> PyResult<()> {
284-
if instance.payload_is::<PyBaseObject>() {
284+
if instance.payload_is::<PyBaseObject>()
285+
|| (instance.class().fast_issubclass(vm.ctx.types.module_type)
286+
&& value.class().fast_issubclass(vm.ctx.types.module_type))
287+
{
285288
match value.downcast::<PyType>() {
286289
Ok(cls) => {
287290
// FIXME(#1979) cls instances might have a payload
@@ -298,7 +301,8 @@ impl PyBaseObject {
298301
}
299302
} else {
300303
Err(vm.new_type_error(
301-
"__class__ assignment only supported for types without a payload".to_owned(),
304+
"__class__ assignment only supported for mutable types or ModuleType subclasses"
305+
.to_owned(),
302306
))
303307
}
304308
}

0 commit comments

Comments
 (0)
0