Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
全局函数不是类的一部分,这是Pythonic吗?_Python - Fatal编程技术网

全局函数不是类的一部分,这是Pythonic吗?

全局函数不是类的一部分,这是Pythonic吗?,python,Python,在我的测试套件中,我有一个名为“utils.py”的文件,其中包含许多测试所需的各种函数。为了实现这一点,我创建了一个“Utils”类,并在其中包含所有函数 一位拥有更多Python经验的同事坚持认为不应该有这样的类,而是所有这些函数都应该是顶级的。因此,“Utils.get_feature_id()”变成了“get_feature_id()” 你同意他的主张吗 Robert在本例中,您使用类的唯一目的就是在名称空间中基本上拥有“方法”。我同意你的同事的看法,你可以让这些函数是顶级的,但要保存在

在我的测试套件中,我有一个名为“utils.py”的文件,其中包含许多测试所需的各种函数。为了实现这一点,我创建了一个“Utils”类,并在其中包含所有函数

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

你同意他的主张吗


Robert

在本例中,您使用
类的唯一目的就是在名称空间中基本上拥有“方法”。我同意你的同事的看法,你可以让这些函数是顶级的,但要保存在一个模块中,这样它们就可以放在一个名称空间中,例如

import utils
utils.get_feature_id()
而不是下面的内容,这将假定您将所有方法都标记为
@staticmethod
,这同样只是添加了一个不必要的层

import utils
utils.Utils.get_feature_id()

在这种情况下,您使用
的唯一目的就是在名称空间中基本上拥有“方法”。我同意你的同事的看法,你可以让这些函数是顶级的,但要保存在一个模块中,这样它们就可以放在一个名称空间中,例如

import utils
utils.get_feature_id()
而不是下面的内容,这将假定您将所有方法都标记为
@staticmethod
,这同样只是添加了一个不必要的层

import utils
utils.Utils.get_feature_id()

对。如果一个函数没有访问一个
self
,那么它很可能不是一个方法。如果您的目标是在不同的名称空间中排列函数,那么可以使用完整的模块。Python在所有地方都使用名称空间,所以我们不必回避像C++那样的全局名称,而java则强制执行(因为它们毕竟不是全局的)。p> 是的。如果一个函数没有访问一个
self
,那么它很可能不是一个方法。如果您的目标是在不同的名称空间中排列函数,那么可以使用完整的模块。Python在所有地方都使用名称空间,所以我们不必回避像C++那样的全局名称,而java则强制执行(因为它们毕竟不是全局的)。p> 这在很大程度上取决于个人偏好(以及与项目其他部分的一致性等)。如果这个类只是为了分组函数而存在,我个人会站在你同事一边,认为模块是更好的封装单元。我同意@NPE.Python不是Java。你不需要把所有的东西都放在课堂上。这是一个意见问题,但我同意你同事的看法。例如,如果您发现自己在Java中重新创建了一个可能被称为“静态类”的类,那么只需忘记该类并生成模块级函数即可。这主要取决于个人偏好(以及与项目其余部分的一致性等)。如果这个类只是为了分组函数而存在,我个人会站在你同事一边,认为模块是更好的封装单元。我同意@NPE.Python不是Java。你不需要把所有的东西都放在课堂上。这是一个意见问题,但我同意你同事的看法。例如,如果您发现自己在Java中重新创建了一个可能被称为“静态类”的类,那么只需忘记该类并生成模块级函数即可。