Pythonic是否具有不属于类的全局函数?

时间:2017-09-05 17:24:00

标签: python

在我的测试套件中,我有一个名为" utils.py"的文件。其中我有许多测试所需的各种功能。为了实现这一目标,我创建了一个" Utils" class并拥有其中的所有函数。

一位拥有更多Python经验的同事坚持认为不应该有这样的类,而所有这些功能都应该是顶级的。因此" Utils.get_feature_id()"变成" get_feature_id()"。

你会赞同他的断言吗?

罗伯特

2 个答案:

答案 0 :(得分:5)

在这种情况下,您使用class的唯一方法就是在命名空间中实际拥有“方法”。我同意你的同事,你可以将这些功能放在顶层,但保存在一个模块中,这样它们确实会被放入命名空间,例如。

import utils
utils.get_feature_id()

而不是以下内容,它会假设您将所有方法标记为@staticmethod,这又会添加一个不必要的图层。

import utils
utils.Utils.get_feature_id()

答案 1 :(得分:1)

是。如果函数不访问self,则它很可能不是一种方法。如果您的目标是将功能安排在不同的命名空间中,则可以使用完整模块。 Python在任何地方都使用名称空间,因此我们不需要回避C ++倾向于和Java强制执行的全局名称(实际上,因为它们毕竟不是全局名称)。