@@ -87,7 +87,7 @@ internal static ClassManagerState SaveRuntimeData()
87
87
if ( ( Runtime . PyDict_DelItemString ( dict . Borrow ( ) , member ) == - 1 ) &&
88
88
( Exceptions . ExceptionMatches ( Exceptions . KeyError ) ) )
89
89
{
90
- // Trying to remove a key that's not in the dictionary
90
+ // Trying to remove a key that's not in the dictionary
91
91
// raises an error. We don't care about it.
92
92
Runtime . PyErr_Clear ( ) ;
93
93
}
@@ -215,7 +215,7 @@ internal static void InitClassBase(Type type, ClassBase impl, ReflectedClrType p
215
215
impl . indexer = info . indexer ;
216
216
impl . richcompare . Clear ( ) ;
217
217
218
-
218
+
219
219
// Finally, initialize the class __dict__ and return the object.
220
220
using var newDict = Runtime . PyObject_GenericGetDict ( pyType . Reference ) ;
221
221
BorrowedReference dict = newDict . Borrow ( ) ;
@@ -271,6 +271,15 @@ internal static void InitClassBase(Type type, ClassBase impl, ReflectedClrType p
271
271
Runtime . PyDict_SetItem ( dict , PyIdentifier . __doc__ , doc . Borrow ( ) ) ;
272
272
}
273
273
}
274
+
275
+ if ( Runtime . PySequence_Contains ( dict , PyIdentifier . __doc__ ) != 1 )
276
+ {
277
+ // Ensure that at least some doc string is set
278
+ using var fallbackDoc = Runtime . PyString_FromString (
279
+ $ "Python wrapper for .NET type { type } "
280
+ ) ;
281
+ Runtime . PyDict_SetItem ( dict , PyIdentifier . __doc__ , fallbackDoc . Borrow ( ) ) ;
282
+ }
274
283
}
275
284
doc . Dispose ( ) ;
276
285
@@ -562,7 +571,7 @@ private static ClassInfo GetClassInfo(Type type, ClassBase impl)
562
571
563
572
return ci ;
564
573
}
565
-
574
+
566
575
/// <summary>
567
576
/// This class owns references to PyObjects in the `members` member.
568
577
/// The caller has responsibility to DECREF them.
0 commit comments