【发布时间】:2021-06-05 22:30:33
【问题描述】:
在 python 中,我有 getter 和 setter,并计算实用程序。 getter 返回属性,setter 设置属性,并且计算实用程序是使用参数计算内容的函数。例如
obj.property = calculate_property(arguments)
但是,有多种方法可以实现calculate_property,它可以
- 成为班级
calculate_property(self)的一员并返回_property - 它可以是一个独立的函数,可以移动到一个单独的文件中
- 可能是静态方法
我对 1) 的问题是,calculate_property 的参数可能会被隐藏,因为它们可能包含在对象本身中,并且不可能在对象之外使用该函数。在 2 和 3 中,calculate 的功能形式被保留,但命名空间不同。
因此,出于这个原因,我排除了 1)。
如果我选择 2),好处是我可以将所有实用程序拆分为小文件,例如utility_a.py、utilities_b.py 并将它们作为模块导入。
如果我选择 3),函数会保留在同一个文件中,从而使其整体更长,但函数封装得更好。
在 2) 和 3) 之间首选哪个?还是我错过了其他解决方案?
【问题讨论】:
-
1是不可能的,因为您已经说过数据被埋没了;同时,我会选择3而不是2,因为它看起来对你的类非常亲密(它创建了它的属性)并且可以作为帮助者。 -
这是实现
2和3的example。只需记住将self添加到签名中,如上所述,您可以将类方法和静态方法放在另一个文件中,然后仅根据需要导入。
标签: python oop functional-programming namespaces static-methods