在python中访问实例变量

时间:2017-07-19 07:50:00

标签: python class inheritance

我有一个类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(这是类变量的值)。

请告知我哪里出错了。

1 个答案:

答案 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