Skip to content

Commit d6e71ad

Browse files
committed
Fix __get__ in @classmethod
1 parent ced6b68 commit d6e71ad

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

vm/src/builtins/classmethod.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,13 @@ impl GetDescriptor for PyClassMethod {
5353
cls: Option<PyObjectRef>,
5454
vm: &VirtualMachine,
5555
) -> PyResult {
56-
let (zelf, obj) = Self::_unwrap(zelf, obj, vm)?;
57-
let cls = cls.unwrap_or_else(|| obj.class().clone().into());
58-
let callable = zelf.callable.lock().clone();
59-
Ok(PyBoundMethod::new_ref(cls, callable, &vm.ctx).into())
56+
let (zelf, _obj) = Self::_unwrap(zelf, obj.clone(), vm)?;
57+
let cls = cls.unwrap_or_else(|| _obj.class().clone().into());
58+
let _descr_get: PyResult<PyObjectRef> = zelf.callable.lock().get_attr("__get__", vm);
59+
match _descr_get {
60+
Err(_) => Ok(PyBoundMethod::new_ref(cls, zelf.callable.lock().clone(), &vm.ctx).into()),
61+
Ok(_descr_get) => vm.invoke(&_descr_get, (cls.clone(), cls)),
62+
}
6063
}
6164
}
6265

0 commit comments

Comments
 (0)