我应该在 class 文档字符串中列出 class 方法吗?
Should I list class methods in the class docstring?
我对用于记录 classes 的 PEP257 标准感到有点困惑。
它说,"The docstring for a class should summarize its behavior and list the public methods and instance variables"
但它也说所有函数都应该有 dosctrings(当然,我想要,这样 help() 才能工作)。
但这似乎涉及重复,即
class foo:
"""A class
Attributes
----------
bar : str
A string
Methods
-------
__init__(fish):
Constructor, fish is a str which self.bar will be set to.
baz():
A function which does blah
"""
def __init__(self, fish):
"""
Constructs an XRTProductRequest object.
Parameters
----------
fish : str
A string, which the self.bar attribute will be set to.
"""
etc...
这很容易出错,因为这意味着当我意识到 __init__
也需要接收一个 int 时,我必须记住在 2 个地方更新文档,我可以保证我会忘了。
它还使 pydoc 输出重复:它打印我的 class 文档字符串,然后说 "Methods defined here" 并继续通过它们自己的文档字符串列出所有方法。
所以,这个重复真的是 PEP257 的一部分,还是我误读了它?我是否应该删除 class 文档字符串的 "Methods" 部分,因为每个方法都有自己的文档字符串?还是这种重复真的是标准的一部分?
TIA
是的,只需从 class 文档字符串中删除方法部分。 我从来没有见过这样的东西。(它 在 standard library 的几个地方使用.) class 文档字符串只需要描述 class 和各个方法的文档字符串,然后处理描述它们自己。
此外,PEP 中的措辞对我来说意味着 class 文档字符串“应该”列出 public 方法,但不以任何方式描述它们其他方式。(上面的标准库示例也是这样做的。) 但如前所述,我永远不会那样做,因为代码不言自明,而且这种清单是一定会过时的。
最后说明:我个人更喜欢使用Google docstring style,因为对我来说它最清晰干净。
示例:
class Animal:
"""
A class used to represent an Animal
...
Attributes
----------
says_str : str
a formatted string to print out what the animal says
name : str
the name of the animal
sound : str
the sound that the animal makes
num_legs : int
the number of legs the animal has (default 4)
Methods
-------
says(sound=None)
Prints the animals name and what sound it makes
"""
says_str = "A {name} says {sound}"
def __init__(self, name, sound, num_legs=4):
"""
Parameters
----------
name : str
The name of the animal
sound : str
The sound the animal makes
num_legs : int, optional
The number of legs the animal (default is 4)
"""
self.name = name
self.sound = sound
self.num_legs = num_legs
def says(self, sound=None):
"""Prints what the animals name is and what sound it makes.
If the argument `sound` isn't passed in, the default Animal
sound is used.
Parameters
----------
sound : str, optional
The sound the animal makes (default is None)
Raises
------
NotImplementedError
If no sound is set for the animal or passed in as a
parameter.
"""
if self.sound is None and sound is None:
raise NotImplementedError("Silent Animals are not supported!")
out_sound = self.sound if sound is None else sound
print(self.says_str.format(name=self.name, sound=out_sound))
是的,在 class 文档字符串中列出方法,然后根据此标准再次记录每个方法。
不过,我建议使用 sphinx:https://www.sphinx-doc.org/en/master/contents.html
我对用于记录 classes 的 PEP257 标准感到有点困惑。
它说,"The docstring for a class should summarize its behavior and list the public methods and instance variables"
但它也说所有函数都应该有 dosctrings(当然,我想要,这样 help() 才能工作)。
但这似乎涉及重复,即
class foo:
"""A class
Attributes
----------
bar : str
A string
Methods
-------
__init__(fish):
Constructor, fish is a str which self.bar will be set to.
baz():
A function which does blah
"""
def __init__(self, fish):
"""
Constructs an XRTProductRequest object.
Parameters
----------
fish : str
A string, which the self.bar attribute will be set to.
"""
etc...
这很容易出错,因为这意味着当我意识到 __init__
也需要接收一个 int 时,我必须记住在 2 个地方更新文档,我可以保证我会忘了。
它还使 pydoc 输出重复:它打印我的 class 文档字符串,然后说 "Methods defined here" 并继续通过它们自己的文档字符串列出所有方法。
所以,这个重复真的是 PEP257 的一部分,还是我误读了它?我是否应该删除 class 文档字符串的 "Methods" 部分,因为每个方法都有自己的文档字符串?还是这种重复真的是标准的一部分?
TIA
是的,只需从 class 文档字符串中删除方法部分。 我从来没有见过这样的东西。(它 在 standard library 的几个地方使用.) class 文档字符串只需要描述 class 和各个方法的文档字符串,然后处理描述它们自己。
此外,PEP 中的措辞对我来说意味着 class 文档字符串“应该”列出 public 方法,但不以任何方式描述它们其他方式。(上面的标准库示例也是这样做的。) 但如前所述,我永远不会那样做,因为代码不言自明,而且这种清单是一定会过时的。
最后说明:我个人更喜欢使用Google docstring style,因为对我来说它最清晰干净。
示例:
class Animal:
"""
A class used to represent an Animal
...
Attributes
----------
says_str : str
a formatted string to print out what the animal says
name : str
the name of the animal
sound : str
the sound that the animal makes
num_legs : int
the number of legs the animal has (default 4)
Methods
-------
says(sound=None)
Prints the animals name and what sound it makes
"""
says_str = "A {name} says {sound}"
def __init__(self, name, sound, num_legs=4):
"""
Parameters
----------
name : str
The name of the animal
sound : str
The sound the animal makes
num_legs : int, optional
The number of legs the animal (default is 4)
"""
self.name = name
self.sound = sound
self.num_legs = num_legs
def says(self, sound=None):
"""Prints what the animals name is and what sound it makes.
If the argument `sound` isn't passed in, the default Animal
sound is used.
Parameters
----------
sound : str, optional
The sound the animal makes (default is None)
Raises
------
NotImplementedError
If no sound is set for the animal or passed in as a
parameter.
"""
if self.sound is None and sound is None:
raise NotImplementedError("Silent Animals are not supported!")
out_sound = self.sound if sound is None else sound
print(self.says_str.format(name=self.name, sound=out_sound))
是的,在 class 文档字符串中列出方法,然后根据此标准再次记录每个方法。 不过,我建议使用 sphinx:https://www.sphinx-doc.org/en/master/contents.html