python-我应该使用静态方法还是顶级函数

发布于 2021-01-29 15:08:58

我来自Java背景,是python的新手。我有几个脚本,它们共享一些与读取和写入文件有关的应用程序特有的辅助功能。有些功能与阅读有关,有些与写作有关。在寻找正确的方法时,我看到了这一点:Python中的静态方法?

他在回答中提到:

最后,请谨慎使用staticmethod!在极少数情况下,Python中需要使用静态方法,而我已经看到它们使用了很多次,而使用单独的“顶层”函数会更加清楚。

我不太了解顶层函数,因此我不确定给出一个更好的简单示例:1)为具有静态阅读器功能的阅读器创建一个类,与为书写器创建的类相同,或者2)声明这些帮助器作为全局功能,为什么?

编辑: 真正 了解这个问题我刚刚发现好文章http://tomayko.com/writings/the-static-method-
thing

关注者
0
被浏览
59
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    在Java中,有一个(恕我直言是错误的)想法,它在所有地方都使用类,甚至只是将不共享任何状态的静态函数组合在一起(因此,此类永远都不会被实例化)。

    这里的Python有所不同。如果您的函数没有某些共享状态1(因此在Java中通常是static函数),并且与“真实”类(=实际上已实例化的)没有紧密关系,则只需在模块。

    其背后的原因是,仅当您实际要实例化它时才需要一个类,因此,将类作为多个不需要共享特定于实例的状态的函数的容器是没有用的。

    实际上,您可以在 某种程度上 将模块视为static类-即,包含函数(=静态方法),模块变量(= static字段)和类型的容器。

    Python的优点在于,拥有顶层函数不会带来全局命名空间污染的问题,因为在Python中顶层函数/ objects /
    …仍然是模块作用域的。因此,您仍然可以按模块对功能进行分组,而无需不必要的class-tax。


    1. 实际上,它们 可以 以模块级变量(即单例)的形式具有某种共享状态;再次,类比模块静态类似乎成立。


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看