This `if not self._datadescriptor` was originally here before type annotations were supported, to prevent showing `descr4 = <_Descriptor ...>` in the docs.
When type annotations were added, the support for appending `:type:` was put in the wrong place.
It should have been outside this if, not within it.
A common use case for this is a class like `namedtuple`, which has a public `_replace` method that is so-named in order not to conflict with arbitrary user-provided attributes.
Rejected spellings include:
* `:meta not-private:`
* `:meta private: False`
term_decode is documented as `(unicode) -> unicode`, but actually:
* Accepts `bytes` arguments, despite not being documented to
* Returns `bytes` when it shouldn't
This is extracted from the more controversial #3584