我正在考虑如何使用super
在 python 中制作管道。我必须对流进行一系列转换,我认为这样做的好方法是:
class MyBase(object):
def transformData(self, x):
return x
class FirstStage(MyBase):
def transformData(self, x):
y = super(FirstStage, self).transformData(x)
return self.__transformation(y)
def __transformation(self, x):
return x * x
class SecondStage(FirstStage):
def transformData(self, x):
y = super(SecondStage, self).transformData(x)
return self.__transformation(y)
def __transformation(self, x):
return x + 1
它按我的预期工作,但有可能重复。如果我有 N 个阶段,我将有 N 个相同transformData
的方法,我唯一改变的是当前类的名称。
有没有办法删除这个样板?我尝试了一些东西,但结果只向我证明我没有完全理解它是如何super
工作的。
我想要的是只定义方法__transformation
并自然地继承一个transformData
将在 MRO 中上升的方法,调用该类的transformData
方法,然后__transformation
在结果上调用当前类。是否有可能或者我必须transformData
为每个子类定义一个新的相同?
我同意这是实施管道的一种糟糕方式。这可以通过更简单(和更清晰)的方案来完成。我认为这是我可以对现有模型进行的最少修改,以便在不过多修改代码的情况下从现有类中获取管道。我同意这不是最好的方法。这将是一个诡计,应该避免诡计。我也认为它是一种更好地理解如何super
工作的方式。
布欧特。出于好奇......是否可以在不transformData
重复的情况下在上述方案中做到这一点?这是一个真正的疑问。是否有一种技巧可以以将其中的调用更改为在当前类上调用transformData
的方式进行继承?super
这将是一个非常不清楚、难以理解、愚蠢的骗局。我知道。但有可能吗?