python中的静态方法与模块函数

时间:2010-08-25 22:48:39

标签: python global static-methods

所以我在一个模块中有一个类,它有一些静态方法。其中一些静态方法只是做crc检查和填充,并且它们在类之外并不是真的有用(我只是在java或C ++中使它们成为私有静态方法)。我想知道我是否应该让它们成为全局类函数(在类之外)。

这样做有什么好处吗?这个类是由from module import class导入的,所以我并不担心这些模块也被引入。但是,我应该让它们成为类方法,以便from module import *更安全吗?

3 个答案:

答案 0 :(得分:7)

使用单个下划线对函数名称进行前缀是一种惯例,即它们是私有的,并且还会阻止使用from module import *导入它们。

另一种技术是在模块中指定__all__列表 - 这可以在模块本身中完成(您不需要__init__.py文件)

__all__ = ['my_class_name']

这更像是一种白名单方法,因此您可以完全控制导入的内容,而无需使用前导下划线。

因此,除非你的方法在逻辑上属于类,并且从你的描述中没有,我将把它们作为模块级函数,并使用这两种方法之一将它们设为私有。

答案 1 :(得分:3)

使它们成为模块级函数,并在它们前面添加一个下划线,以便消费者了解它们是供私人使用的。

答案 2 :(得分:3)

如果它们在课外没用,那么制作模块方法的动机是什么?将它们保持为静态方法使名称空间更清晰。

将它移到外面的唯一好处可能是人们可以引用它们而不使用类名称。假设您有一个在很多地方都有参考的日志方法,这可能是一种风格选择。