@@ -1951,13 +1951,6 @@ fn descriptors_to_items(
19511951
19521952fn impl_pytypeinfo ( cls : & syn:: Ident , attr : & PyClassArgs , ctx : & Ctx ) -> TokenStream {
19531953 let Ctx { pyo3_path, .. } = ctx;
1954- let cls_name = get_class_python_name ( cls, attr) . to_string ( ) ;
1955-
1956- let module = if let Some ( ModuleAttribute { value, .. } ) = & attr. options . module {
1957- quote ! { :: core:: option:: Option :: Some ( #value) }
1958- } else {
1959- quote ! { :: core:: option:: Option :: None }
1960- } ;
19611954
19621955 #[ cfg( feature = "experimental-inspect" ) ]
19631956 let type_hint = {
@@ -1966,11 +1959,14 @@ fn impl_pytypeinfo(cls: &syn::Ident, attr: &PyClassArgs, ctx: &Ctx) -> TokenStre
19661959 } ;
19671960 #[ cfg( not( feature = "experimental-inspect" ) ) ]
19681961 let type_hint = quote ! { } ;
1962+ #[ cfg( not( feature = "experimental-inspect" ) ) ]
1963+ let _ = attr;
19691964
19701965 quote ! {
19711966 unsafe impl #pyo3_path:: type_object:: PyTypeInfo for #cls {
1972- const NAME : & ' static str = #cls_name;
1973- const MODULE : :: std:: option:: Option <& ' static str > = #module;
1967+
1968+ const NAME : & str = <Self as #pyo3_path:: PyClass >:: NAME ;
1969+ const MODULE : :: std:: option:: Option <& str > = <Self as #pyo3_path:: impl_:: pyclass:: PyClassImpl >:: MODULE ;
19741970
19751971 #type_hint
19761972
@@ -1982,7 +1978,7 @@ fn impl_pytypeinfo(cls: &syn::Ident, attr: &PyClassArgs, ctx: &Ctx) -> TokenStre
19821978 . unwrap_or_else( |e| #pyo3_path:: impl_:: pyclass:: type_object_init_failed(
19831979 py,
19841980 e,
1985- <Self as #pyo3_path:: type_object :: PyTypeInfo >:: NAME
1981+ <Self as #pyo3_path:: PyClass >:: NAME
19861982 ) )
19871983 . as_type_ptr( )
19881984 }
@@ -2328,6 +2324,8 @@ impl<'a> PyClassImplsBuilder<'a> {
23282324 let Ctx { pyo3_path, .. } = ctx;
23292325 let cls = self . cls ;
23302326
2327+ let cls_name = get_class_python_name ( cls, self . attr ) . to_string ( ) ;
2328+
23312329 let frozen = if self . attr . options . frozen . is_some ( ) {
23322330 quote ! { #pyo3_path:: pyclass:: boolean_struct:: True }
23332331 } else {
@@ -2336,6 +2334,7 @@ impl<'a> PyClassImplsBuilder<'a> {
23362334
23372335 quote ! {
23382336 impl #pyo3_path:: PyClass for #cls {
2337+ const NAME : & str = #cls_name;
23392338 type Frozen = #frozen;
23402339 }
23412340 }
@@ -2378,6 +2377,13 @@ impl<'a> PyClassImplsBuilder<'a> {
23782377 . doc
23792378 . as_ref ( )
23802379 . map_or ( c"" . to_token_stream ( ) , PythonDoc :: to_token_stream) ;
2380+
2381+ let module = if let Some ( ModuleAttribute { value, .. } ) = & self . attr . options . module {
2382+ quote ! { :: core:: option:: Option :: Some ( #value) }
2383+ } else {
2384+ quote ! { :: core:: option:: Option :: None }
2385+ } ;
2386+
23812387 let is_basetype = self . attr . options . subclass . is_some ( ) ;
23822388 let base = match & self . attr . options . extends {
23832389 Some ( extends_attr) => extends_attr. value . clone ( ) ,
@@ -2562,6 +2568,7 @@ impl<'a> PyClassImplsBuilder<'a> {
25622568 #pyclass_base_type_impl
25632569
25642570 impl #pyo3_path:: impl_:: pyclass:: PyClassImpl for #cls {
2571+ const MODULE : :: std:: option:: Option <& str > = #module;
25652572 const IS_BASETYPE : bool = #is_basetype;
25662573 const IS_SUBCLASS : bool = #is_subclass;
25672574 const IS_MAPPING : bool = #is_mapping;
0 commit comments