【发布时间】:2021-10-27 22:32:28
【问题描述】:
在我处理的许多问题中,我发现我将有一个自定义类,然后是一个容器类,用于存储这些对象和作用于类中所有对象的方法。
例如,考虑一个曲线类和一个容器。
class Curve:
def __init__(self, args):
self.label
def getLength(self):
# code that gets length
...
curves = [curve1, curve2, ..., ]
class CurvesContainer:
def __init__(self, curves):
self.curves = curves
...
def setLabels(self, labels):
for curve, label in zip(self.curves, labels):
curve.label = label
def getLengths(self):
lengths = []
for curve in self.curves:
lengths.append(curve.getLength())
return lengths
curve1 = container.curves[1]
但是,如果我们使用此设置,我们最终会调用container.curves/self.curves 很多 - 有点丑陋!
似乎一种重构方法是从list继承如下:
class CurvesContainer(list):
def __init__(self, curves):
super().__init__(curves)
def setLabels(self, labels):
for curve, label in zip(self, labels):
curve.label = label
def getLengths(self):
lengths = []
for curve in self:
lengths.append(curve.getLength())
return lengths
curve1 = container[1]
但是,我认为这在实践中做得并不多 - 我想知道这是否出于某种原因是不好的形式?
【问题讨论】:
-
这个类似乎没有充分的理由存在。它不代表有意义的抽象或提供有用的功能。您可以使用普通列表。
-
这是prefer composition over inheritance问题的又一次迭代
标签: python list containers