有多少私有变量太多了?封装类?课堂练习?

2024-05-28 19:32:28 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,我现在正在为python开发一个内部统计包,它主要是为了结合使用arcgis geoprocessor,用于建模比较和工具。在

总之,我有一个类,计算统计。我们就叫它统计吧。现在我的统计类,已经到了非常大的地步。它使用由其他统计信息计算的统计信息,来计算其他统计数据集等。这会导致大量的私有变量,这些变量被简单地保存以防止重新计算。然而,也有一些特定的,虽然使用频率很高,但它们通常只被功能的一个或两个关键子部分使用。(例如矩阵对角线和概率的总和)。然而,它开始成为一个主要的眼睛,我觉得我做这件事是非常错误的。在

那么这很糟糕吗?在

一位同事建议我,简单地开始把核心功能和通用功能放在一起,放在主类中,然后简单地使用一些引用主类的胶囊,然后简单地在它们自己内部完成任何需要的功能。E、 为了计算模型预测的准确度,我会创建一个胶囊,它简单地引用父对象,它将卸载模型预测所需的所有计算。在

这样的事情真的是个好主意吗?有更好的方法吗?现在,我有十几个不同的子统计数据被转储到一个文本文件中,以生成一个小报告。代码库正在增长,如果我可以开始拆分越来越多的python类,我会很高兴的。我只是不确定做这种事情的最佳方式是什么。在


Tags: 工具模型功能信息矩阵建模事情关键
3条回答

我能想出几个解决办法。一种方法是使用如下枚举将值存储在数组中:

StatisticType = enum('AveragePerDay','MedianPerDay'...)

另一种方法是使用如下继承:

^{pr2}$

对于“过多”没有硬性规定,但是一个指导原则是,如果字段、属性和方法的列表在折叠时超过一个完整的屏幕,那么它可能太大了。在

一个类变得“太胖”(有太多的功能和相关的状态)是一种常见的反模式,虽然这是“基类”(反模式的“胖基类”绰号)的常见现象,但它确实可以在不涉及任何继承的情况下发生。在

许多设计模式(简称DPs)可以帮助您重新调整代码,将大型、不稳定、不可维护的“胖类”精简为一个良好的协作类包(为了简单起见,可以通过“Facade”DPs使用):例如,考虑State、Strategy、Memento、Proxy。在

你可以直接解决这个问题,但我认为,尤其是你在一篇评论中提到你把它看作是一个一般的类设计主题,这可能会给你提供一个很好的机会来深入研究设计模式的非常有用的领域,尤其是“重构到模式”(Fowler的这本书名很好,尽管它不是接触Python特定的问题)。在

具体地说,我相信您将主要关注一些结构和行为模式(因为我认为对于这个用例,您不需要太多创造性的模式,除了可能对某些情况下需要的一些昂贵的计算状态进行“惰性初始化”—请参阅this wikipedia entry以获取DPs的相当详尽的列表,其中分类和链接,以进一步解释每一个)。在

为什么不为需要计算的每个统计信息创建一个类,并且当统计信息需要其他统计信息时,只需将后者的一个实例传递给计算方法?但是,对于您的代码和所需的功能知之甚少。也许你可以用更广泛的方式来描述,你需要计算什么样的统计数据,以及它们是如何相互依赖的?在

不管怎样,如果要计算某些统计数据,我会立即为每个统计数据创建单独的类。当我为python编写代码统计库时,我做过一次。每个统计信息,比如类被继承的次数或者函数被调用的频率,都是一个独立的类。不过,我不需要把它们用在一起。在

相关问题 更多 >

    热门问题