更好的性能:花哨的物体或许多功能?

时间:2015-02-04 18:16:30

标签: python oop functional-programming

Python中的示例

我正在使用仅以两个值为特征的数据:起点和终点。让我们假设这些对应于染色体的起点和终点。所以数据看起来像:

(1,50)
(20, 500)
(40, 80)
...

现在我需要添加一些功能。例如,假设我想开始将它们用作集合,或者按起始值对它们进行排序。我对OOP有偏见的第一个倾向是为这些具有start, end等属性和as_set()等方法的对象创建一个小类。

class Range(object):
    def __init__(start, end):
        self.start = start
        self.end = end

    def as_set(self):
        """ Set of integers on range {start, end} """
        return set(range(self.start, self.end))

另一种设计方法是创建一个具有严格调用签名的函数库:

 def as_set(start, end):
     return set(range(start, end))

我认为具有属性访问权限的Range对象将使涉及排序的操作更容易,但代价是什么。在半性能危急情况下,您是否会不惜一切代价避免使用类,或者内存开销通常值得获得收益?换句话说,在什么情况下应该避免实现新类来存储简单数据?例如,这会减慢NP-hard算法的速度,或者只是增加内存开销,同时保留或多或少地保留算法的大O?我知道这取决于用例,但我正在寻找关于何时走一条路线与另一条路线的一般考虑因素。

0 个答案:

没有答案