Python 继承在这里合适吗?

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

我有一个类,它创建一个对象(一个框),并包含重新排列其内容的策略。但是,我认为这应该是两个类,因为我通常使用FP,我不确定如何使
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
a
Solver
?”如果答案是否定的(这里似乎是这样),继承是不合适的。让
Solver
接受一个
Box
作为变为实例属性的参数是正确的方法。

你能用
Box
es替换所有
Solver
s吗?如果是,继承可能被认为是有效的。如果没有,就用作文的方式。如果S是T的子类型,则T类型的对象可以替换为S类型的对象(即T类型的对象可以替换为任何子类型的对象),而不改变程序的任何期望属性(正确性、执行的任务等)我认为你混淆了继承和组合。@Piohen绝对不是。盒子就是盒子。策略是用来重新配置其内容的方法。这是我脑海中的定义,但不能完全正确地引用。从你的缩略示例中不清楚盒子和策略应该如何相互作用。代码中唯一的错误可能是
self.box.stragtegy1()
,而不是
self.strategy1()
(因为策略是求解器的方法,而不是盒子的方法)。我看不出继承在这里有多大意义,不过如果这看起来有用的话,也许你可以有解算器和盒子子类的层次结构。@Ryan:那就不要使用继承。继承不是为了代码重用。它是为了“创建好的类型”。