请考虑以下代码段
class super1():
def __init__(self):
self.variable = ''
def setVariable(self, value):
self.variable = value
class child(super1):
def __init__(self):
super.__init__(self)
self.setSuperVariable()
def setSuperVariable(self):
# according to this variable should have value 10
self.setVariable(10)
super_instance = super1()
child1 = child()
print super_instance.variable
# prints nothing
super_instance.setVariable(20)
print super_instance.variable
如您所见,我有一个基类和一个派生类。我希望派生类设置"变量"也可以在程序之外使用。例如,子类正在执行复杂的任务并设置变量,该变量将被其他类和函数使用。
但截至目前,由于子类具有自己的实例,因此它不会反映在范围之外。
此问题是否有解决方法?
@ Elmo
class super():
def __init__(self):
self.variable = ''
def setVariable(self, value):
self.variable = value
class child():
def __init__(self, instance_of_super):
self.handle = instance_of_super
self.setSuperVariable()
def setSuperVariable(self):
# according to this variable should have value 10
self.handle.setVariable(10)
super_instance = super()
child1 = child(super_instance)
print super_instance.variable
# prints nothing
super_instance.setVariable(20)
print super_instance.variable
这将设置变量。虽然我不使用继承。 :)
答案 0 :(得分:0)
修改子实例时,super1实例中的变量不会更改,因为继承在类级别工作。创建实例后,它将自己及其父项的所有内容。每个实例彼此完全独立,一个实例中的更改不会反映在另一个实例上。
你可以通过类属性获得那种副作用,而这就是你想要的,你根本不需要继承:
class MyClass:
class_attribute = None
@classmethod
def set(cls, value):
cls.class_attribute = value
def do_computation(self):
self.set(10)
a = MyClass()
b = MyClass()
print a.class_attribute
print b.class_attribute
a.do_computation()
print a.class_attribute
print b.class_attribute
输出结果为:
None
None
10
10