Python 继承在这里合适吗?
我有一个类,它创建一个对象(一个框),并包含重新排列其内容的策略。但是,我认为这应该是两个类,因为我通常使用FP,我不确定如何使Python 继承在这里合适吗?,python,python-3.x,oop,inheritance,Python,Python 3.x,Oop,Inheritance,我有一个类,它创建一个对象(一个框),并包含重新排列其内容的策略。但是,我认为这应该是两个类,因为我通常使用FP,我不确定如何使box类与solver类一起工作,该类包含重新排列框内容的策略 box是否可以是solver的子类?这似乎不对。如果没有,我如何才能使这两个工作在一起 class Box(object): def __init__(self, contents, size): self.contents = contents
box类
与solver类
一起工作,该类包含重新排列框内容的策略
box
是否可以是solver
的子类?这似乎不对。如果没有,我如何才能使这两个工作在一起
class Box(object):
def __init__(self, contents, size):
self.contents = contents
self.size = size
def fillBox (self, contents):
pass
class Solver(object):
def __init__(self, boxObject, strategy):
self.box = boxObject
self.strategy = strategy
if self.strategy == strategy1:
self.strategy1()
def strategy1 (self):
// execute some algorithm manipulating the contents of the box
通常要问自己的问题是:“is____________;?”其中第一个空格是建议的子类,第二个空格是建议的超类,在本例中是“is
Box
aSolver
?”如果答案是否定的(这里似乎是这样),继承是不合适的。让Solver
接受一个Box
作为变为实例属性的参数是正确的方法。你能用Box
es替换所有Solver
s吗?如果是,继承可能被认为是有效的。如果没有,就用作文的方式。如果S是T的子类型,则T类型的对象可以替换为S类型的对象(即T类型的对象可以替换为任何子类型的对象),而不改变程序的任何期望属性(正确性、执行的任务等)我认为你混淆了继承和组合。@Piohen绝对不是。盒子就是盒子。策略是用来重新配置其内容的方法。这是我脑海中的定义,但不能完全正确地引用。从你的缩略示例中不清楚盒子和策略应该如何相互作用。代码中唯一的错误可能是self.box.stragtegy1()
,而不是self.strategy1()
(因为策略是求解器的方法,而不是盒子的方法)。我看不出继承在这里有多大意义,不过如果这看起来有用的话,也许你可以有解算器和盒子子类的层次结构。@Ryan:那就不要使用继承。继承不是为了代码重用。它是为了“创建好的类型”。