【发布时间】:2012-10-12 22:34:09
【问题描述】:
假设我有一个类层次结构。通过为实例提供额外的参数,我理论上可以通过单个类来维护其功能。这是一个例子(超级做作,但我想保持简单):
class Base:
def __init__(self, a):
self.a = a
def f(self, x):
raise NotImplemented # needs to be defined in subclass
class Mult(Base)
def f(self, x):
return self.a * x
class Add(Base):
def f(self, x):
return self.a + x
m = Mult(5)
a = Add(7)
m.f(10)
a.f(20)
上面的代码可以重构为:
class Compute:
def __init__(self, a, func):
self.a = a
self.func = func
def f(self, x)
return self.func(self.a, x)
m = Compute(5, operator.mult)
a = Compute(7, operator.add)
我知道对于这个愚蠢的例子,它没有任何区别。所以除了理解我的意思,请不要去想它。
我想知道在为我在现实生活中遇到的各种情况做出选择时应该考虑哪些因素?换句话说,使用类与参数化实例的优缺点是什么?
【问题讨论】:
-
您能否详细说明您正在尝试做什么 IRL?听起来你希望你的类能够执行任意函数,但也有一些预定义的。 IMO 这应该是一个具有存储在字典中的预定义函数的单个类。
-
@poorsod 我需要代表各种各样的业务规则,它们有很多重叠。我想知道我是否应该创建一个类层次结构,或者只是创建使用正确功能实例化的实例。
标签: python oop class design-patterns architecture