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