Python:单独的实用程序文件还是使用静态方法?

Python: separate utilities file or use static methods?

提问人:Cody Aldaz 提问时间:3/8/2021 更新时间:3/8/2021 访问量:476

问:

在 python 中,我有 getter 和 setter,并计算实用程序。getter 返回属性,setter 设置属性,计算实用程序是用参数计算东西的函数。F.D.公司

obj.property = calculate_property(arguments)

但是,有多种方法可以实现,它可以calculate_property

  1. 成为班级的一员并返回calculate_property(self)_property
  2. 它可以是一个独立的功能,可以移动到一个单独的文件中
  3. 它可能是一种静态方法

我对 1) 的问题是,calculate_property的参数可能会被遮挡,因为它们可能包含在对象本身中,并且不可能在对象外部使用该函数。在 2 和 3 中,保留了 的功能形式,但命名空间不同。calculate

所以我排除了 1) 出于这个原因。

II如果我选择 2) 优点是我可以将所有实用程序拆分为小文件,例如 utilities_a.py、utilities_b.py并将它们作为模块导入。

如果我使用 3) 函数保留在同一个文件中,使其整体更长,但函数封装得更好。

在 2) 和 3) 之间哪个更可取?还是我错过了不同的解决方案?

python oop 函数式编程 命名空间 static-methods

评论

1赞 Razzle Shazl 3/8/2021
1是不可能的,因为您已经说过数据被埋没了;同时,我会选择它,因为它对你的类来说似乎非常亲密(它创建它的属性),并且可以作为帮手。32
0赞 Razzle Shazl 3/8/2021
下面是同时实现 和 的示例。只要记住如前所述添加到签名中,您可以将类方法和静态方法放在另一个文件中,然后仅根据需要导入。23self

答:

2赞 Razzle Shazl 3/8/2021 #1

你可以同时实现这两者,也可以通过这个示例将静态方法添加到在单独文件中定义的类中。23

helper.py:

def square(self):
    self.x *= self.x

fitter.py:

class Fitter(object):
    def __init__(self, x: int):
        self.x = x
    from helper import square

if name == '__main__':
    f = Fitter(9)
    f.square()
    print(f.x)

输出:

81

改编自这个答案,它是为类方法这样做的。似乎也适用于静态方法。

评论

1赞 Cody Aldaz 3/8/2021
哇,真是太酷了!在类定义内部导入会将其添加到类命名空间中。这就是我喜欢静态方法和保持文件分离的原因。但是,我同意您上面的评论,尽管文件的长度变长,但策略 3 可能是最清楚的。
0赞 Razzle Shazl 3/8/2021
@Cody我觉得这太酷了:)如果您觉得这个答案有用,请考虑接受它。谢谢。
1赞 Arpad Horvath -- Слава Україні 3/10/2021
@CodyAldaz我已经在函数中使用了导入,也许还在类中使用了导入。(例如.pdb.set_trace())。从未意识到导入将对象设置到该命名空间中。很高兴知道。谢谢。