python - 实现特定于类但不直接使用属性的方法的最佳方法
问题描述
我有一个存储数据的类,并允许我在给定一些测量值的情况下对其进行更新。但是,更新步骤并不直接采用原样的属性,而是修改后的版本。我的更新输出也是如此:在将其保存到对象属性之前,我仍然必须对其进行处理。
class Dummy:
def _prepare_data(self):
X = self.X
# Do stuff to X
return X_prepared
@staticmethod
def _update(X_prep, measures):
# Do stuff to X_prep with measures
return X_updated
def _store_result(self, X_up):
# Do stuff to X_up
self.X = X_up_good_format
def do_update(self, measures):
# Method called from the outside, user doesn't care about data prep
X = self._prepare_data()
X = self._update(X, measures)
self._store_results(X)
在这种情况下,我的私有方法_update
对类是盲目的,因为我不需要我的类的属性或方法,但我把它作为一个简单的函数放在外面是没有意义的,因为它不“活”单独”,它只存在于这个类中使用。因此,我将该方法作为静态方法(如示例中所示),但我读到这样做是设计不良的标志,因为它违反了 OOP 范式。有一个更好的方法吗?
PS:我宁愿不合并这三个私有方法,因为我希望能够_update
独立调用该方法以进行测试。
解决方案
我解决您的问题的方法是将_update
with合并do_update
为一个,并将_prepare_data
and_store_result
合并为一个property
:
class Dummy:
@property
def X(self):
X = self._X
# Do stuff to X
return X_prepared
@X.setter
def X(self, value):
# Do stuff to value
self._X = value_good_format
def do_update(self, measures):
# Method called from the outside, user doesn't care about data prep
# Do stuff to self.X with measures
self.X = X_updated
现在子类可以只覆盖do_update
方法,同时仍然依赖于属性提供的转换X
。
推荐阅读
- python - 如果值列表出现在熊猫数据框的任何列中,如何打印行
- haskell - 如何在haskell中为函数使用泛型类型
- c++ - 通过引用传递数组而不在函数声明中明确说明数组的大小
- java - (井字游戏)应用程序不断停止
- c++ - C++ 打印,数字分组到小数点的*右*
- javascript - 在组件Vue js中渲染时如何制作动态v-if?
- javascript - 在javascript中格式化文本
- scala - 如何在 Scala 中总结这两个 Spark Dataframes?
- java - 如何在 Spring Boot 中手动配置 SSL 握手
- c++ - 是否允许调用参数中的类型名 T?