python - 在python中访问实例变量

标签 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(这是类变量的值)。

请告诉我哪里出了问题。

最佳答案

保留对 a_obj.counter 的引用是没有意义的。您所做的就是创建对不可变对象(immutable对象)的新引用。您没有引用a_obj上的属性,仅引用a_obj.counter指向的对象。 p>

但是,当运行 a.process() 时,counter 引用将被指向不同整数对象的引用替换b.counter 仍然引用初始值。

您想要保留对 a_obj 本身的引用,这样您就可以在需要时询问它的 counter 属性 there 指向什么:

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 .

关于python - 在python中访问实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45184182/

相关文章:

python - "the label [5] is not in the [index]"复制行时

java - 在java中的外部类之外创建内部类的实例

java - 编写接口(interface)时如何避免重复代码?

抽象数据类型中方法调用的 Java 顺序?

c++ - 在 C++ 中是否可以定义一个纯虚函数?

python - 从 Python 属性文件中读取 Celery 配置

python - 在 mingw 中设置 python 3

python - 构造方法名

python - 如何在python中随机选择一个文件

javascript - 如何按类和该 div 中的类来定位/选择 div