python中的Access实例变量
我有a和b两个等级,如下所示: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
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
将其声明为类成员,而不是实例成员,这在本例中是不必要的,甚至是令人困惑的。实例字段只能在构造函数中定义