我需要直接从继承的类更改对象变量。 下面是我的代码示例:
class A(object):
def __init__(self,initVal=0):
self.myVal = initVal
def worker(self):
self.incrementor = B()
self.incrementor.incMyVal(5)
class B(A):
def incMyVal(self,incVal):
super().myVal += incVal
obj = A(5)
print(obj.myVal)
obj.worker()
print(obj.myVal)
但它不起作用:
^{pr2}$我还尝试在B类中对变量使用全局/非局部关键字,但没有成功。在
在我的主要例子中,B
类是一个事件处理程序。当事件发生时,它应该改变对象的属性。所以我不能在incMyVal
方法中使用return
。在
super()
只能在类MRO中搜索类属性,而不能搜索实例属性。myVal
是在类的实例上设置的,而不是在类本身上设置的。在只有一个实例;不管来自类
A
或派生类的代码正在更改实例上的属性,它只是一个命名空间。在但是,在您的情况下,您甚至不应该使用继承。您试图使用一个独立的第二个实例来改变
A
实例的属性。类继承不允许您访问基类的实例。在重构
B
以获取A
的实例,然后对该实例执行操作:注意,
B
在这里不是A
的子类;它根本不是同一类型的(专门化的)对象;它是一种不同类型的东西,它可以增加另一个对象的属性。在创建
^{pr2}$B
的实例时传入实例:这确实创建了一个循环引用,它可以使对象存活的时间比需要的时间长。您可能需要使用weak reference代替:
现在,
B
实例只保存对其A
实例的弱引用,如果该实例不再存在,则不会执行任何操作。在相关问题 更多 >
编程相关推荐