`DynamicClassAttribute` drops explicitly provided empty docstrings
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- Python
- Estrelas
- 77.2k
- Forks
- 35.9k
- Métricas de merge de PRs
- Métricas de PR pendentes
Descrição
Bug report
Bug description:
types.DynamicClassAttribute loses an explicitly provided empty docstring. Its constructor assigns self.__doc__ = doc or fget.__doc__, so when you pass doc='' and fget is None, the descriptor ends up with None.__doc__ (“The type of the None singleton.”) instead of retaining the empty string. This breaks parity with property, which preserves an empty doc, and cascades through setter()/deleter().
from types import DynamicClassAttribute
attr = DynamicClassAttribute(fget=None, fset=None, fdel=None, doc='')
print(repr(attr.__doc__)) # Expected '', but prints 'The type of the None singleton.'
None
Easy Fix:
class DynamicClassAttribute:
def __init__(self, fget=None, fset=None, fdel=None, doc=None):
self.fget = fget
self.fset = fset
self.fdel = fdel
- self.__doc__ = doc or fget.__doc__
- self.overwrite_doc = doc is None
+ if doc is None and fget is not None:
+ doc = fget.__doc__
+ self.__doc__ = doc
+ self.overwrite_doc = doc is None
CPython versions tested on:
3.12
Operating systems tested on:
Linux
Linked PRs
- gh-140975
- gh-141242
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece pelo construtor de DynamicClassAttribute na implementação de types do CPython e inspecione como uma docstring vazia fornecida explicitamente é tratada quando fget é None. Confirme que o descritor e os resultados de setter()/deleter() preservam '', correspondendo ao comportamento de property, e verifique as PRs vinculadas para identificar trabalhos que já estejam em andamento.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- python
- Domínio
- backend
- Tipo de issue
- Bug
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Status de atividade
- Estagnada
- Clareza
- Claramente especificada
- Facilidade para iniciantes
- 35/100