Python 继承归来

Python 继承归来,python,inheritance,Python,Inheritance,如何更新x.test以从继承返回值 所以我想要x.test返回['testfromb','testfromc'] 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

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

所以我想要x.test返回['testfromb','testfromc']

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更新为['testfrom B','testfrom 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()
??
但是我又如何在所有继承中进行自我测试呢?因此,如果我在y.doSomething()之后调用z.test,我希望有['testfrom B']


从另一个角度看,继承工作不能有继承类的基类复合语句

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

class A():
    test = []

    def coolThings(self):
        print test

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

我再重复一遍,对于这个问题,所有A和B的实例都将具有相同的测试值。

继承不是这样工作的。试着这样做:

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

继承创建类之间的关系,而不是对象之间的关系。在您的示例中,类(
A
B
C
)是相关的,但对象(
x
y
z
)不是相关的


告诉我们您想做什么,我们应该能够帮助您找到一个好的方法。

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

您有一个静态数据问题。如果希望的所有实例及其子对象的所有实例共享一个测试属性,请使其在类上保持静态,如下所示:

class A(object):
    test = []

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

遗传是另一种动物。继承只允许您将A的方法的副本提供给A的所有子级。这不是关于共享数据,而是关于共享/扩展功能。

此外,x、y和z是独立的对象:调用一个方法不会改变其他方法。试着做
z.test
。是的,谢谢,就像比尔蒙所说的“这是关于共享/扩展功能的”,它现在开始工作了!再次非常感谢。x将无法访问B中定义的doSomething。你救了我一天!我没有足够的时间进行调试,但seens的工作方式类似于charme class a()test=[]def coolThings(self):print self.test class B(a)def\uuuuuu init\uuuuuu(self)self.test=a.test a.\uuuu init\uuuuuu(self)返回