我正在编写一个类来实现一个算法。该算法具有三个级别的复杂性。实现这样的类对我来说很有意义:
class level0:
def calc_algorithm(self):
# level 0 algorithm
pass
# more level0 stuff
class level1(level0):
def calc_algorithm(self):
# level 1 algorithm
pass
# more level1 stuff
class level2(level1):
def calc_algorithm(self):
# level 2 algorithm
pass
# more level2 stuff
我希望 calc_algorithm 将在每个类中被覆盖。根据某个命令行选项,我想对数据运行 0 级、1 级或 2 级。这就是我对算法的称呼:
for offset in itertools.product(*map(xrange, (dim[0] - 1, dim[1] - 1, dim[2] - 1))):
algorithm(offset).calc_algorithm
其中 algorithm 是 level0、level1 或 level2。
我在其他语言中的做法是:
for offset in itertools.product(*map(xrange, (dim[0] - 1, dim[1] - 1, dim[2] - 1))):
if (level == 0):
level0(offset).calc_algorithm
else:
if (level == 1):
level1(offset).calc_algorithm
else:
level2(offset).calc_algorithm
有没有一种 Pythonic 的方法来给一个类起别名来引用另一个类,这样我就可以这样做:
algorithm = (level == 0) and level0 or (level == 1) and level1 or level2
然后像上面那样调用algorithm?
只是为了比较,在 Specman 中,这是一种面向方面的语言,我可以这样编写类:
struct algorithm {
level: uint;
// common stuff for all levels
calc_algorithm() is empty;
when (level == 0) {
calc_algorithm() is only {
// level 0 algorithm
};
};
when (level == 1) {
calc_algorithm() is only {
// level 1 algorithm
};
};
when (level == 1) {
calc_algorithm() is only {
// level 1 algorithm
};
};
};
然后一旦我设置了 level 结构成员,我就可以透明地使用该类的其余部分。
请您参考如下方法:
您是否正在寻找类似的东西?
dispatch = {0: level0, 1: level1, 2:level2}
dispatch[offset].calc_algorithm
键(和 offset)显然可以来自命令行。
