python - 对 Python 类和实例变量的复合赋值

标签 python class

我一直在努力理解 Python 对类和实例变量的处理。特别是,我发现了 this answer很有帮助。基本上它说,如果你声明一个类变量,然后你对 [instance].property 进行赋值,你将完全赋值给一个不同的变量——一个在与类不同的命名空间中变量。

然后我考虑了——如果我希望我的类的每个实例都有一个具有默认值(比如零)的成员,我应该这样做吗:

class Foo:
    num = 0

还是这样?

class Foo:
    def __init__(self):
        self.num = 0

根据我之前阅读的内容,我认为第二个示例将初始化“正确的”变量(实例而不是类变量)。但是,我发现第一种方法也非常有效:

class Foo:
    num = 0

bar = Foo()
bar.num += 1 # good, no error here, meaning that bar has an attribute 'num'
bar.num
>>> 1
Foo.num
>>> 0 # yet the class variable is not modified! so what 'num' did I add to just now?

那么..为什么这行得通?我没有得到什么? FWIW,我之前对 OOP 的理解来自 C++,因此类比解释(或指出它崩溃的地方)可能会有用。

最佳答案

就我个人而言,我找到了 these documents Shalabh Chaturvedi 就此主题提供了极其有用和丰富的信息。

bar.num += 1bar.num = bar.num + 1 的简写。这是在右侧选取类变量 Foo.num 并将其分配给实例变量 bar.num

关于python - 对 Python 类和实例变量的复合赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2424451/

相关文章:

python - 在 python 中查找特定文本的优雅方法

python - 在多个不同的工作人员之间共享排队的工作负载

python - 在 dynamoDB 查询中使用字符串作为 FilterExpression 的参数

javascript - 将 React 函数转换为 React 类

python - 具有本地化日期时间索引的数据帧 : Drop every row but those who exists in another dataframe

python - Django - MYSQL中自动删除 'old'数据集

java - 如何从父类(super class)获取参数?

python - 更改父级继承的python类的方法

java - 使用类声明用整数和字符串填充数组

c++ - 对象 vector 无法编译