代码之家  ›  专栏  ›  技术社区  ›  Falmarri

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

  •  9
  • Falmarri  · 技术社区  · 14 年前

    所以我在一个模块中有一个类,它有一些静态方法。这些静态方法中的两个只做CRC检查和填充,它们在类之外是非常有用的(我只是在Java或C++中让它们成为私有静态方法)。我想知道我是否应该让它们成为全局类函数(类外)。

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

    3 回复  |  直到 14 年前
        1
  •  7
  •   Scott Griffiths    14 年前

    在函数名前面加上一个下划线是一种表示它们是私有的约定,它还将阻止使用 from module import * .

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

    __all__ = ['my_class_name']
    

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

    因此,除非您的方法在逻辑上属于类,并且根据您的描述它们不属于类,否则我将把它们作为模块级函数,并使用这两种方法中的一种使它们成为私有的。

        2
  •  3
  •   Ignacio Vazquez-Abrams    14 年前

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

        3
  •  3
  •   Wai Yip Tung    14 年前

    如果它们在类外没有用处,那么让它们成为模块方法的动机是什么?将它们保持为静态方法会使名称空间更干净。

    把它移到外面的唯一好处可能是人们可以引用它们而不使用限定它们的类名。假设你有一个在很多地方都有参考的日志方法,作为一个风格选择,这可能是有意义的。