我经常会编写一个类,以及与该类密切相关的辅助函数。对于我目前的情况, 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/