我有一个类a和b如下:
class a(object):
counter=10
def __init__(self):
self.counter=1
def process(self):
self.counter+=1
return self.counter
class b(a):
def __init__(self,a_obj):
self.counter=a_obj.counter
def process(self):
result=self.counter
return (result)
我所谓的主要功能是:
a_object=a()
b_object=b(a)
for x in range(1,6):
print(a_object.process())
print(b_object.process())
我的结果如下:
2
3
4
5
6
10
但是我希望能够访问A中最后更新的计数器值,即6(引用实例变量)而不是10(这是类变量的值)。
请告知我哪里出错了。
答案 0 :(得分:2)
保持对a_obj.counter
的引用毫无意义。您所做的只是创建对不可变对象的新引用。您不引用a_obj
上的属性,只有a_obj.counter
也指向的对象。
但是当a.process()
运行时,counter
引用被替换一个指向不同整数对象的引用。 b.counter
仍然引用初始值。
您希望保留对a_obj
本身的引用,以便您可以随时询问counter
} 所指示的内容
class b(a):
def __init__(self, a_obj):
self.a_obj = a_obj
def process(self):
result = self.a_obj.counter
return result
您可能想要了解Python名称和属性的工作原理;它们只是与实际物体相关的小名称标签。请参阅Ned Batchelder's excellent Facts and myths about Python names and values article。