python中的Access实例变量

python中的Access实例变量,python,class,inheritance,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.co

我有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)
2
3
4
5
6
10
我所谓的主要功能是:

a_object=a()
b_object=b(a)

for x in range(1,6):
    print(a_object.process())

print(b_object.process())
我的结果如下:

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)
2
3
4
5
6
10
但我希望能够访问I.e.6(引用实例变量)中计数器的最后更新值,而不是10(类变量的值)


请告知我在这方面哪里出了问题

保留对对象计数器的引用是没有意义的。您所做的只是创建一个对不可变对象的新引用。您没有引用
a_obj
上的属性,只有
a_obj.counter
也指向的对象

但是当运行
a.process()
时,
计数器
引用将替换为指向不同整数对象的引用<代码>b.计数器仍然引用初始值

您希望保留对
a_obj
本身的引用,以便在需要时询问它那里的
计数器
属性指向什么:

class b(a):
    def __init__(self, a_obj):
        self.a_obj = a_obj
    def process(self):
        result = self.a_obj.counter
        return result

您可能想了解Python名称和属性是如何工作的;它们只是绑定到实际对象的小名称标签。请参阅。

是否只需要
新建\u var=b\u object.process()
。。。不,我希望访问类a中最后更新的值(在示例中,它最后更新为6),并在类b中使用它进行某些操作(在本例中,只需打印),您正在将
a
传递给
b
构造函数,而您可能希望传递
a\u对象
您需要调用
b(a\u对象)
,而不是
b(a)
对象计数器是不可变的对象。保留对它的引用是毫无意义的,请保留对a_obj的引用。非常感谢,这完全是有道理的,您的解释也让我对这个问题有了更清晰的认识。干杯。另外值得注意的是,在原始代码中,
counter=10
将其声明为类成员,而不是实例成员,这在本例中是不必要的,甚至是令人困惑的。实例字段只能在构造函数中定义