python - 最好的风格、类方法或全局函数是什么?

标签 python class coding-style module

我经常会编写一个类,以及与该类密切相关的辅助函数。对于我目前的情况, Window类来包装一些win32api调用以及查找窗口等功能。这些辅助函数应该是给定模块中的全局函数,还是应该是 Window 的类方法类(class)。也就是说,我的模块中应该有:

class Window(object):
    def __init__(self, handle): 
        self.handle = handle
        ...
    ...
    @classmethod
    def find_windows(cls, params):
        handles = ...
        return map(cls, handles)

其用法是:

from window import Window
windows = Window.find_windows("Specialty")

或者我应该这样做:

class Window(object):
    def __init__(self, handle): 
        self.handle = handle
        ...
    ...

def find_windows(params):
    handles = ...
    return map(Window, handles)

其用法是:

from window import Window, find_windows
windows = find_windows("Speciality")

更简洁地说:分组应该在类级别(例如,它们将是 Java 中的静态方法)还是在模块级别?

最佳答案

第一种方法的优点是,如果您子类化 Window,您可以重写 find_windows 方法(与 java 中的静态方法不同)。然而,只有当重写最终有意义时这才有用,否则我认为将它作为一个函数看起来更好。

编辑:如果您有多种查找 Window 对象的方法,那么有一个名为 WindowFinder 或 WindowManager 的附加类封装查询/查找逻辑是有意义的。

这是 django 中使用的一种模式,如果您的 Window 类是一个数据库模型,那么您将拥有 Window.objects 指向 WindowManager。窗口管理器具有构建 SQL 查询的方法。

然后,您可以执行以下操作:

Window.objects.all()

Window.objects.filter(name="Speciality")

关于python - 最好的风格、类方法或全局函数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12254329/

相关文章:

python - 字符串索引 - 为什么 S[0][0] 有效而 S[1][1] 失败?

python - 无法导入 PyQt4.QtGui

python - 错误值错误 : Property X is required

c++ - 有没有一种方法可以换出成员变量而不用在子构造函数中单独传递它们?

javascript - 在类中声明对象类型

c# - 正确使用 Timer 类

c# - 切换内部循环影响性能?

java - 注释代码

python - 如何在 Windows 7 中安装 python freetype

jQuery按类选择具有未知路径的子元素