从继承返回

时间:2011-02-17 13:14:50

标签: python inheritance

我如何更新x.test以使值从继承返回?

所以我想要x.test返回['测试来自B'','测试来自C']

class A()    
    def __init__(self)    
        self.test = []
        return
    def coolThings(self):
        # do cool things here and print the new self.test
        print self.test

class B(A)    
    def __init__(self)    
        A.__init__(self)
        return

    def doSomething(self)    
        self.test.append('test from B')

class C(A)    
    def __init__(self)    
        A.__init__(self)
        return
    def doAnotherthing(self)    
        self.test.append('test from  C') 
--

In [575]     x = A()  

In [576]     y = B()

In [577]     z = c()


In [582]     y.doSomething()

In [583]     z.doAnotherthing()

In [584]     x.test
Out[584]     []

In [585]     y.test
Out[585]     ['test B']

In [586]     z.test
Out[586]     ['test C']

x.coolThings()
??

再次如何更新x.test进行['测试来自B'','测试来自C']

但是我又如何在所有继承中保持self.test?所以,如果我在y.doSomething()之后调用z.test,我希望['测试来自B']

此致

4 个答案:

答案 0 :(得分:1)

继承创建类之间的关系,而不是对象。在您的示例中,类(ABC)是相关的,但对象(xyz)是相关的不

告诉我们您要做的事情,我们应该能够帮助您找到一个好方法。

答案 1 :(得分:0)

继承以另一种方式工作,你不能拥有继承类的基类复合语句。

我不确定你要完成什么,但是让单独的继承对象影响基类,你可能会使用类变量,但请记住,在这种情况下,所有实例现在都具有相同的测试值。

class A():
    test = []

    def coolThings(self):
        print test

class B(A):
    def doSomething(self):
        A.test.append('test from B')

我再说一遍,此事的A和B的所有实例都具有相同的测试值。

答案 2 :(得分:0)

继承不起作用。试试这个:

x = C()
x.doSomething()
x.doAnotherThing()
x.test

答案 3 :(得分:0)

这里有两个问题:继承和静态数据

您有静态数据问题。如果您希望A的所有实例及其子项的所有实例共享TEST属性,请在类上将其设置为静态,如下所示:

class A(object):
    test = []

    def coolThings(self):
        # do cool things here and print the new self.test
        print self.test

继承是一种不同的动物。继承只是让你给A的方法的A副本的所有孩子。这不是关于共享数据,而是关于共享/扩展功能。