复合赋值给Python类和实例变量

复合赋值给Python类和实例变量,第1张

概述我一直在努力理解Python对类和实例变量的处理.特别是,我发现this answer非常有帮助.基本上它说如果你声明一个类变量,然后你对[instance] .property做一个赋值,你将完全分配一个不同的变量 - 一个在与类变量不同的命名空间中.所以我考虑过 - 如果我希望我的类的每个实例都有一个默认值(比如零)的成员,我应该这样做:class Fo

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

所以我考虑过 – 如果我希望我的类的每个实例都有一个默认值(比如零)的成员,我应该这样做:

class Foo:    num = 0

或者像这样?

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

基于我之前读过的内容,我认为第二个例子是初始化’right’变量(实例而不是类变量).但是,我发现第一种方法也非常有效:

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

那么..为什么这个有效?我得不到什么? FWIW,我之前对OOP的理解来自C,因此通过类比(或指向它发生故障)的解释可能是有用的.最佳答案就个人而言,我发现Shalabh Chaturvedi的these documents对于这个主题非常有用且内容丰富.

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

总结

以上是内存溢出为你收集整理的复合赋值给Python类和实例变量全部内容,希望文章能够帮你解决复合赋值给Python类和实例变量所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1205931.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存