@@ -330,7 +330,7 @@ namespace objects
330330 // rest corresponding to its declared bases.
331331 //
332332 inline object
333- new_class (char const * name, std::size_t num_types, class_id const * const types)
333+ new_class (char const * name, std::size_t num_types, class_id const * const types, char const * doc )
334334 {
335335 assert (num_types >= 1 );
336336
@@ -348,7 +348,12 @@ namespace objects
348348 }
349349
350350 // Call the class metatype to create a new class
351- object result = object (class_metatype ())(module_prefix () + name, bases, dict ());
351+ dict d;
352+
353+ if (doc != 0 )
354+ d[" __doc__" ] = doc;
355+
356+ object result = object (class_metatype ())(module_prefix () + name, bases, d);
352357 assert (PyType_IsSubtype (result.ptr ()->ob_type , &PyType_Type));
353358
354359 if (scope ().ptr () != Py_None)
@@ -360,17 +365,14 @@ namespace objects
360365
361366 class_base::class_base (
362367 char const * name, std::size_t num_types, class_id const * const types, char const * doc)
363- : object(new_class(name, num_types, types))
368+ : object(new_class(name, num_types, types, doc ))
364369 {
365370 // Insert the new class object in the registry
366371 converter::registration& converters = const_cast <converter::registration&>(
367372 converter::registry::lookup (types[0 ]));
368373
369374 // Class object is leaked, for now
370375 converters.class_object = (PyTypeObject*)incref (this ->ptr ());
371-
372- if (doc)
373- this ->attr (" __doc__" ) = doc;
374376 }
375377
376378 void class_base::set_instance_size (std::size_t instance_size)
0 commit comments