在你反对之前:每个程序员都是懒惰的。否则,您将不会手动编程和执行所有操作!
一个简单的例子。
我有一个类Line,其中包含处理一条线所需的所有内容(例如使用两个顶点/点创建的对象)。这个类实际上非常复杂,为了简单、可维护性和清晰起见,我想保持这样:我用两个顶点提供一个类,并输出一些困难的结果,例如两点之间的距离。
问题
现在,问题是,虽然我需要跟踪这些单独的行,但有时我还想将它们作为一个整体来处理。例如,我想计算由多条线组成的路径的长度。
目前的解决方案和缺点
我创建了一个名为的类Lines,它也为此提供了一些方法。
Lines目前是一个numpy.ndarray不那么伟大的孩子:
- 命名空间被 ndarray 的方法弄乱了;
 - 我正在使用s在方法中
ufunc提供一个包装器,但是在这样的两个地方维护代码是很乏味的。LinesLine 
问题
那么,你们将如何Line在跟踪各个行的同时有效地“矢量化”类?
我可以将所有内容都放入Lines并考虑Line为一种特殊情况,我尝试过,但这确实会影响清晰度,并使各个行的所有引用都很难实现和维护。
代码示例
import numpy as np
class Line:
    def __init__ (self, input_points):
        assert len(np.array(input_points).squeeze()) == 2
        self._points = np.array(input_points)
    def get_distance(self):
        return np.sqrt(((self._points[0]-self._points[1])**2).sum())
from itertools import combinations
class Lines(np.ndarray):
   _get_dists = np.frompyfunc(Line.get_distance, 1, 1)
   def __new__(cls, data):
       comb = [Line(el) for el in combinations(data, 2)]
       obj = np.asarray(comb).view(cls)
       obj = obj.squeeze()
       return obj
   def get_all_distances(self):
       return self._get_dists(self)