diff --git a/crates/vm/src/builtins/getset.rs b/crates/vm/src/builtins/getset.rs index f56191f5f..3fa4667a9 100644 --- a/crates/vm/src/builtins/getset.rs +++ b/crates/vm/src/builtins/getset.rs @@ -7,7 +7,7 @@ use crate::{ builtins::type_::PointerSlot, class::PyClassImpl, function::{IntoPyGetterFunc, IntoPySetterFunc, PyGetterFunc, PySetterFunc, PySetterValue}, - types::GetDescriptor, + types::{GetDescriptor, Representable}, }; #[pyclass(module = false, name = "getset_descriptor")] @@ -96,7 +96,7 @@ impl PyGetSet { } } -#[pyclass(flags(DISALLOW_INSTANTIATION), with(GetDescriptor))] +#[pyclass(flags(DISALLOW_INSTANTIATION), with(GetDescriptor, Representable))] impl PyGetSet { // Descriptor methods @@ -153,6 +153,23 @@ impl PyGetSet { } } +impl Representable for PyGetSet { + #[inline] + fn repr_str(zelf: &Py, vm: &VirtualMachine) -> PyResult { + let class = unsafe { zelf.class.borrow_static() }; + // Special case for object type + if std::ptr::eq(class, vm.ctx.types.object_type) { + Ok(format!("", zelf.name)) + } else { + Ok(format!( + "", + zelf.name, + class.name() + )) + } + } +} + pub(crate) fn init(context: &Context) { PyGetSet::extend_class(context, context.types.getset_type); }