python中的Access实例变量

2024-04-20 05:12:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有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)

我所谓的主要功能是:

^{pr2}$

我的研究结果如下:

2
3
4
5
6
10

但是我想在6(引用实例变量)而不是10(类变量的值)中访问counter的最后更新值。在

请告诉我这件事哪里出了问题。在


Tags: 实例self功能objreturnobjectinitdef
1条回答
网友
1楼 · 发布于 2024-04-20 05:12:59

保留对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。在

相关问题 更多 >