| 144 | // meth_get__qualname__ in CPython |
| 145 | #[pygetset] |
| 146 | fn __qualname__(zelf: NativeFunctionOrMethod, vm: &VirtualMachine) -> PyResult<PyStrRef> { |
| 147 | let zelf = zelf.0; |
| 148 | let qualname = if let Some(bound) = &zelf.zelf { |
| 149 | if bound.class().is(vm.ctx.types.module_type) { |
| 150 | return Ok(vm.ctx.intern_str(zelf.value.name).to_owned()); |
| 151 | } |
| 152 | let prefix = if bound.class().is(vm.ctx.types.type_type) { |
| 153 | // m_self is a type: use PyType_GetQualName(m_self) |
| 154 | bound.get_attr("__qualname__", vm)?.str(vm)?.to_string() |
| 155 | } else { |
| 156 | // m_self is an instance: use Py_TYPE(m_self).__qualname__ |
| 157 | bound.class().name().to_string() |
| 158 | }; |
| 159 | vm.ctx.new_str(format!("{}.{}", prefix, &zelf.value.name)) |
| 160 | } else { |
| 161 | vm.ctx.intern_str(zelf.value.name).to_owned() |
| 162 | }; |
| 163 | Ok(qualname) |
| 164 | } |
| 165 | |
| 166 | #[pygetset] |
| 167 | fn __doc__(zelf: NativeFunctionOrMethod) -> Option<&'static str> { |