使用装饰器修改Python文档字符串:这是一个好主意吗?

7

Python文档字符串必须以字面字符串的形式给出;但有时为几个函数(例如,不同的构造函数)提供类似的文档字符串很有用,或者几个访问方法可能接受相同的参数列表(然后依赖于相同的隐藏方法),因此最好在所有地方使用相同的描述。对于这种情况,我可以通过分配给__doc__来构造一个文档字符串,我通过一个简单的装饰器来实现。该系统在python 2中非常好用,我很高兴它是如此简单,清晰和封装。

问题:这是个好主意吗?特别是,是否有工具会被这种设置所困惑(例如,从源代码而不是从字节码提取文档字符串的任何内容)。这个解决方案在python 3中仍然有效吗?是否存在其他原因或情况使得这种做法不可取?


"不同的构造函数"?我猜您指的是某种工厂函数,因为您只能有一个__init__ - Karl Knechtel
我认为“工厂函数”不太对。我指的是类的静态成员,它们创建同一类的实例。在直接支持多态构造函数的语言中,它们都将是多态构造函数。但是,是的,工厂函数可能是另一个用例。 - alexis
我认为它们是一种工厂。除了命名空间之外,静态成员函数和自由函数(使用C++术语)之间实际上没有任何区别。虽然Python有单独的“类方法”和“静态方法”概念。 - Karl Knechtel
1个回答

4

这段代码不应该破坏任何工具,并且在Python 3上应该正常运行。

如果它不会影响源码的可读性,比如你仍然能够找出函数是做什么的以及如何使用它,那么就可以接受。

可能的问题在于,它掩盖了一个糟糕的设计。如果几个方法使用相同的参数列表,则应重构代码(创建一个使用该列表的对象),而不是通过生成重复的文档字符串来修补。


谢谢!听起来很不错。我认为设计还可以:所有方法都调用相同的实现方法,并以不同的格式返回搜索结果(从对象的内容中)。在接口上有不同的操作名称是很好的,无论如何,都有一个带有标准名称的现有API。关于文档字符串,阅读源代码时查看实现方法足够简单。但是,对于交互式帮助,应该记录接口方法。 - alexis
重新打开了这个问题,因为我希望听到更多的反馈意见。并没有冒犯的意思! - alexis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接