我有元素和元素容器。容器本身就是元素。 相应的方法可以应用于元素和容器。 为此,我有以下类(伪python代码):
class Elem:
def meth1(self):
...
def meth2(self):
...
def meth3(self):
...
class Container:
def __init__(self):
self.elems = ...
def meth1(self):
for e in self.elems:
e.meth1()
def meth2(self):
for e in self.elems:
e.meth2()
def meth3(self):
for e in self.elems:
e.meth3()
重构以尽可能避免重复代码:
class Elem(object):
# An Elem can be a terminal Elem or a composite Elem (Container)
def __init__(self):
self.elems = ...
# specific meth1 code for Elem
def meth1(self):
...
def meth2(self):
...
def meth3(self):
...
class Container(Elem):
#apply meth to each contained Elem
def each(self, meth):
for e in self.elems:
e.meth()
def meth1(self):
self.each(meth1)
def meth2(self):
self.each(meth2)
def meth3(self):
self.each(meth3)
如何传递polimorphic方法(meth)作为参数? 实现这个想法的最佳方法是什么
1.-函数工具。部分方法(仅适用于python>;(三)
def each(self, meth):
for e in self.elems:
e.meth()
meth1 = functools.partialmethod(each, meth = meth1)
2.-财产
def each(self, meth):
for e in self.elems:
e.meth()
@property
def meth1(self):
self.each(meth1)
3.-作为字符串和getattr的方法
def each(self, methname):
for e in self.elems:
getattr(e, methname)()
def meth1(self):
self.each('meth1')
4.-其他选择
希望你能明白
目前没有回答
相关问题 更多 >
编程相关推荐