python模块导入中的继承vs类实例

时间:2012-06-27 07:10:08

标签: python oop inheritance module

道歉,如果这没有意义,我不是一个经验丰富的程序员。

请考虑以下代码:

import mymodule

class MyClass:
    def __init__(self):
        self.classInstance = myModule.classInstance()

然后......

from mymodule import classInstance

class MyClass(classInstance):
    def __init__(self):
        pass

如果我只是想在MyClass中使用一个classInstance,是否可以从模块中导入特定的类并让MyClass继承这个类?

在决定这两种方法时,是否有任何最佳实践或我应该考虑的事项?

非常感谢

2 个答案:

答案 0 :(得分:6)

请允许我提出一个不同的例子。

想象一下拥有Vector类。 现在你想要一个Point Point。 Point可以用向量定义,但也许它具有Vector没有的其他额外功能。 在这种情况下,您从Vector派生Point。

现在你需要一个Line类。 Line不是上述任何类的特化,因此您可能不希望从它们中的任何类派生它。 但Line使用积分。在这种情况下,您可能希望以这种方式启动Line类:

class Line(object):
    def __init__(self):
        self.point1 = Point()
        self.point2 = Point()

哪里有点像这样:

class Point(Vector):
    def __init__(self):
        Vector.__init__(self)

所以答案是真的:取决于你需要做什么,但是当你清楚地知道你编码的是什么时,选择子类别之间的选择就变得很明显了。

我希望它有所帮助。

答案 1 :(得分:0)

你让它听起来像是在尝试“选择”这两种方法,但它们完全不同。第二个定义了一个类,它继承自一个名为classInstance的类(容易引起混淆)。第一个定义了一个名为MyClass的类(不继承自除基本obect类型之外的任何类型),该类具有名为self.classInstance的实例变量,该变量恰好设置为{的实例{1}}上课。

为什么要为您的班级classInstance命名?