__doc__ 在 python 上使用 help() 在 class
__doc__ in python and using help() on a class
我最近去面试,做了一些小的编程测试,他们有一个简单的两个 class 脚本,可以计算面积、边长等。形状看起来像这样:
class Shape(object):
def __init__(self, side1, side2, side3, side4):
self.side1 = side1
...
@abstractmethod
def calc_area(self):
pass
class Triangle(Shape):
def calc_area(self):
... etc..
他们问我的一个问题是,如果我们 运行 help(Shape(3, 5, 5, 6))
假设所有对象都已初始化会发生什么? 我的回答是,没有,因为没有 docstring
或 __doc__
。看来我在这个答案上被低估了,我似乎不明白为什么?我认为 运行 help()
时什么都不会发生是我的错误想法吗?
如果您查看 pydoc.Helper
class 的来源(尤其是它的 help()
方法),这实际上就是您调用 help()
时得到的内容,您你会看到它仍然会使用 inspect
模块和其他一些技巧来获取对象的基本结构。
当然,如果原始代码编写者不费心编写文档,我们的目标是至少向其他开发人员提供 object/function 签名。就个人而言,我不明白 help()
存在于全局命名空间中的原因,但我理解他们为什么从历史和哲学的角度放置它。
话虽如此,在我看来,无论谁采访了你,他都是个混蛋——这与编程并没有太大关系,而是吹毛求疵,我可以说,这很不符合 Python 风格。也就是说,假设他们没有试图让您进入 @abstractmethod
描述符,当然,这可能是一个有效的问题。
您对代码的描述中有几件事可能是他们希望您提及的。对我来说,哪一个是你对代码的记忆错误,哪一个是真正的问题,这对我来说并不完全明显,但它们都是需要考虑的事情:
你显示的Shape
class里面有一个@abstractmethod
。如果它有一个正确定义的 metaclass(从 abc.ABCMeta
派生的东西),您将无法从中创建任何实例。只有覆盖了每个抽象方法的具体子classes 才能被实例化。所以他们可能希望你说“你不能在 Shape(...)
上调用 help()
因为后者会导致 TypeError
.
在实例上调用 help
将为您提供每个 class 方法的描述,即使它没有文档字符串。如果文档字符串存在,它将首先显示,但方法(和描述符等)的文档将始终显示在后面。
我最近去面试,做了一些小的编程测试,他们有一个简单的两个 class 脚本,可以计算面积、边长等。形状看起来像这样:
class Shape(object):
def __init__(self, side1, side2, side3, side4):
self.side1 = side1
...
@abstractmethod
def calc_area(self):
pass
class Triangle(Shape):
def calc_area(self):
... etc..
他们问我的一个问题是,如果我们 运行 help(Shape(3, 5, 5, 6))
假设所有对象都已初始化会发生什么? 我的回答是,没有,因为没有 docstring
或 __doc__
。看来我在这个答案上被低估了,我似乎不明白为什么?我认为 运行 help()
时什么都不会发生是我的错误想法吗?
如果您查看 pydoc.Helper
class 的来源(尤其是它的 help()
方法),这实际上就是您调用 help()
时得到的内容,您你会看到它仍然会使用 inspect
模块和其他一些技巧来获取对象的基本结构。
当然,如果原始代码编写者不费心编写文档,我们的目标是至少向其他开发人员提供 object/function 签名。就个人而言,我不明白 help()
存在于全局命名空间中的原因,但我理解他们为什么从历史和哲学的角度放置它。
话虽如此,在我看来,无论谁采访了你,他都是个混蛋——这与编程并没有太大关系,而是吹毛求疵,我可以说,这很不符合 Python 风格。也就是说,假设他们没有试图让您进入 @abstractmethod
描述符,当然,这可能是一个有效的问题。
您对代码的描述中有几件事可能是他们希望您提及的。对我来说,哪一个是你对代码的记忆错误,哪一个是真正的问题,这对我来说并不完全明显,但它们都是需要考虑的事情:
你显示的
Shape
class里面有一个@abstractmethod
。如果它有一个正确定义的 metaclass(从abc.ABCMeta
派生的东西),您将无法从中创建任何实例。只有覆盖了每个抽象方法的具体子classes 才能被实例化。所以他们可能希望你说“你不能在Shape(...)
上调用help()
因为后者会导致TypeError
.在实例上调用
help
将为您提供每个 class 方法的描述,即使它没有文档字符串。如果文档字符串存在,它将首先显示,但方法(和描述符等)的文档将始终显示在后面。