Estou escrevendo uma classe leve cujos atributos devem ser publicamente acessíveis e apenas às vezes substituídos em instanciações específicas. Não há provisão na linguagem Python para a criação de docstrings para atributos de classe, ou qualquer tipo de atributo, para esse assunto. Qual é a forma esperada e suportada, caso haja uma, para documentar esses atributos? Atualmente estou fazendo este tipo de coisa:
class Albatross(object):
"""A bird with a flight speed exceeding that of an unladen swallow.
Attributes:
"""
flight_speed = 691
__doc__ += """
flight_speed (691)
The maximum speed that such a bird can attain.
"""
nesting_grounds = "Raymond Luxury-Yacht"
__doc__ += """
nesting_grounds ("Raymond Luxury-Yacht")
The locale where these birds congregate to reproduce.
"""
def __init__(self, **keyargs):
"""Initialize the Albatross from the keyword arguments."""
self.__dict__.update(keyargs)
Isso resultará em docstring da classe contendo a seção docstring padrão inicial, bem como as linhas adicionadas para cada atributo por meio de atribuição aumentada para __doc__
.
Embora esse estilo não pareça ser expressamente proibido nas diretrizes de estilo do docstring , ele também não é mencionado como uma opção. A vantagem aqui é que ele fornece uma maneira de documentar os atributos junto com suas definições, enquanto ainda cria uma docstring de classe apresentável e evita a necessidade de escrever comentários que reiteram as informações da docstring. Ainda estou meio chateado por ter de escrever os atributos duas vezes; Estou pensando em usar as representações de string dos valores no docstring para, pelo menos, evitar a duplicação dos valores padrão.
Esta é uma violação hedionda das convenções da comunidade ad hoc? Está tudo bem? Existe uma maneira melhor? Por exemplo, é possível criar um dicionário contendo valores e docstrings para os atributos e depois adicionar o conteúdo à classe __dict__
e docstring no final da declaração da classe; isso aliviaria a necessidade de digitar os nomes e valores dos atributos duas vezes. editar : esta última ideia, eu acho, não é realmente possível, pelo menos não sem construir dinamicamente a classe inteira a partir de dados, o que parece uma ideia realmente ruim, a menos que haja algum outro motivo para fazer isso.
Eu sou muito novo em Python e ainda estou trabalhando nos detalhes do estilo de codificação, então críticas não relacionadas também são bem-vindas.
attribute doc string
mencionado no PEP 257 que não é muito conhecido e parece difícil de encontrar, que pode responder à pergunta dos OPs e é suportado por algumas ferramentas de origem. Isso não é opinião. É um fato, parte da linguagem e praticamente exatamente o que o OP deseja.