@@ -193,10 +193,13 @@ def _gather_members(
193193 found_members = _get_members_to_document (
194194 want_all = want_all ,
195195 get_attr = get_attr ,
196+ class_signature = config .autodoc_class_signature ,
196197 inherit_docstrings = config .autodoc_inherit_docstrings ,
197198 props = props ,
198199 opt_members = options .members or (),
199200 inherited_members = inherited_members ,
201+ opt_private_members = options .private_members ,
202+ opt_special_members = options .special_members ,
200203 ignore_module_all = bool (options .ignore_module_all ),
201204 attr_docs = attr_docs ,
202205 )
@@ -205,6 +208,7 @@ def _gather_members(
205208 want_all = want_all ,
206209 events = events ,
207210 get_attr = get_attr ,
211+ class_signature = config .autodoc_class_signature ,
208212 inherit_docstrings = config .autodoc_inherit_docstrings ,
209213 options = options ,
210214 props = props ,
@@ -229,12 +233,10 @@ def _gather_members(
229233 if not obj_type :
230234 # don't know how to document this member
231235 continue
232- doccls = registry .documenters [obj_type ]
233236 # give explicitly separated module name, so that members
234237 # of inner classes can be documented
235238 dotted_parts = '.' .join ((* props .parts , member_name ))
236239 full_name = f'{ props .module_name } ::{ dotted_parts } '
237- documenter = doccls (directive , full_name , indent )
238240
239241 # We now try to import all objects before ordering them. This is to
240242 # avoid possible circular imports if we were to import objects after
@@ -249,10 +251,13 @@ def _gather_members(
249251 env = env ,
250252 events = events ,
251253 get_attr = get_attr ,
252- options = documenter . options ,
254+ options = directive . genopt ,
253255 )
254256 if member_props is None :
255257 continue
258+
259+ doccls = registry .documenters [obj_type ]
260+ documenter = doccls (directive , full_name , indent )
256261 documenter .props = member_props
257262
258263 member_documenters .append ((documenter , is_attr ))
@@ -277,10 +282,13 @@ def _get_members_to_document(
277282 * ,
278283 want_all : bool ,
279284 get_attr : _AttrGetter ,
285+ class_signature : Literal ['mixed' , 'separated' ],
280286 inherit_docstrings : bool ,
281287 props : _ModuleProperties | _ClassDefProperties ,
282288 opt_members : ALL_T | Sequence [str ],
283289 inherited_members : Set [str ],
290+ opt_private_members : ALL_T | Sequence [str ] | None ,
291+ opt_special_members : ALL_T | Sequence [str ] | None ,
284292 ignore_module_all : bool ,
285293 attr_docs : dict [tuple [str , str ], list [str ]],
286294) -> list [ObjectMember ]:
@@ -315,7 +323,16 @@ def _get_members_to_document(
315323 else :
316324 # specific members given
317325 assert opt_members is not ALL
318- wanted_members = frozenset (opt_members )
326+
327+ # Merge :private-members: and :special-members: into :members:
328+ combined_members = set (opt_members )
329+ if opt_private_members is not None and opt_private_members is not ALL :
330+ combined_members .update (opt_private_members )
331+ if opt_special_members is not None and opt_special_members is not ALL :
332+ combined_members .update (opt_special_members )
333+ if class_signature == 'separated' and props .obj_type in {'class' , 'exception' }:
334+ combined_members |= {'__new__' , '__init__' } # show __init__() method
335+ wanted_members = frozenset (combined_members )
319336
320337 object_members_map : dict [str , ObjectMember ] = {}
321338 if props .obj_type == 'module' :
@@ -489,6 +506,7 @@ def _filter_members(
489506 get_attr : _AttrGetter ,
490507 options : _AutoDocumenterOptions ,
491508 props : _ModuleProperties | _ClassDefProperties ,
509+ class_signature : Literal ['mixed' , 'separated' ],
492510 inherit_docstrings : bool ,
493511 inherited_members : Set [str ],
494512 exclude_members : EMPTY_T | Set [str ] | None ,
@@ -513,6 +531,7 @@ def _filter_members(
513531 member_cls = obj .class_ ,
514532 get_attr = get_attr ,
515533 has_attr_doc = has_attr_doc ,
534+ class_signature = class_signature ,
516535 inherit_docstrings = inherit_docstrings ,
517536 inherited_members = inherited_members ,
518537 parent = props ._obj ,
@@ -793,6 +812,7 @@ def _should_keep_member(
793812 member_cls : Any ,
794813 get_attr : _AttrGetter ,
795814 has_attr_doc : bool ,
815+ class_signature : Literal ['mixed' , 'separated' ],
796816 inherit_docstrings : bool ,
797817 inherited_members : Set [str ],
798818 parent : Any ,
@@ -862,12 +882,16 @@ def _should_keep_member(
862882
863883 if special_member_re .match (member_name ):
864884 # special __methods__
885+ if member_name == '__doc__' or is_filtered_inherited_member :
886+ return False
865887 if special_members and member_name in special_members :
866- if member_name == '__doc__' : # NoQA: SIM114
867- return False
868- elif is_filtered_inherited_member :
869- return False
870888 return has_doc
889+ if (
890+ class_signature == 'separated'
891+ and member_name in {'__new__' , '__init__' }
892+ and inspect .isclass (parent )
893+ ):
894+ return has_doc # show __init__() method
871895 return False
872896
873897 if is_private :
0 commit comments