提问人:Cody Aldaz 提问时间:3/8/2021 更新时间:3/8/2021 访问量:476
Python:单独的实用程序文件还是使用静态方法?
Python: separate utilities file or use static methods?
问:
在 python 中,我有 getter 和 setter,并计算实用程序。getter 返回属性,setter 设置属性,计算实用程序是用参数计算东西的函数。F.D.公司
obj.property = calculate_property(arguments)
但是,有多种方法可以实现,它可以calculate_property
- 成为班级的一员并返回
calculate_property(self)
_property
- 它可以是一个独立的功能,可以移动到一个单独的文件中
- 它可能是一种静态方法
我对 1) 的问题是,calculate_property的参数可能会被遮挡,因为它们可能包含在对象本身中,并且不可能在对象外部使用该函数。在 2 和 3 中,保留了 的功能形式,但命名空间不同。calculate
所以我排除了 1) 出于这个原因。
II如果我选择 2) 优点是我可以将所有实用程序拆分为小文件,例如 utilities_a.py、utilities_b.py并将它们作为模块导入。
如果我使用 3) 函数保留在同一个文件中,使其整体更长,但函数封装得更好。
在 2) 和 3) 之间哪个更可取?还是我错过了不同的解决方案?
答:
2赞
Razzle Shazl
3/8/2021
#1
你可以同时实现这两者,也可以通过这个示例将静态方法添加到在单独文件中定义的类中。2
3
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())。从未意识到导入将对象设置到该命名空间中。很高兴知道。谢谢。
评论
1
是不可能的,因为您已经说过数据被埋没了;同时,我会选择它,因为它对你的类来说似乎非常亲密(它创建它的属性),并且可以作为帮手。3
2
2
3
self