Python中的静态方法与模块函数
我在一个模块里有一个类,这个类里面有一些静态方法。其中有几个静态方法主要是做一些CRC检查之类的,这些方法在类外部其实用处不大(在Java或C++里我可能会把它们设为私有静态方法)。我在想,是不是应该把它们改成全局的类函数(也就是放在类外面)。
这样做有什么好处吗?这个类是通过 from module import class
来导入的,所以我不担心会把那些模块也一起拉进来。但是,我是不是应该把它们做成类的方法,这样用 from module import *
的时候会更安全一些呢?
3 个回答
3
如果这些方法在类外部没有用处,那为什么要把它们做成模块方法呢?把它们保持为静态方法可以让命名空间更整洁。
把方法放到外面唯一的好处可能是这样别人可以在不使用类名的情况下直接引用它们。比如说你有一个日志方法在很多地方都被引用,这样做可能在风格上更合理。
3
把它们做成模块级别的函数,并在前面加一个下划线,这样使用的人就知道这些函数是私用的。
8
在函数名前加一个下划线是一种约定,表示这个函数是私有的,别人不能随便使用。同时,这样做也会阻止它们被用 from module import *
这种方式导入。
另一种方法是在模块中指定一个 __all__
列表 - 这可以直接在模块里完成(不需要 __init__.py
文件)。
__all__ = ['my_class_name']
这种方法更像是一个白名单,你可以完全控制哪些内容可以被导入,而不需要使用前面的下划线。
所以,除非你的方法确实应该属于这个类,从你的描述来看并不是这样,我建议你把它们保持为模块级别的函数,并使用这两种方法中的一种来让它们变成私有的。