python中类属性和实例属性的区别

 我来答
百度网友e0828fe10cb
2020-02-13 · TA获得超过2.9万个赞
知道大有可为答主
回答量:1.1万
采纳率:29%
帮助的人:576万
展开全部
今天一同事说踩了python的坑,
这确实是个“坑”
但是我觉得python之所以这样设计,就是明确要求写代码的人知道自己在写什么^
^
python的实例属性必须在__init__(self)
方法中定义,直接跟在类名后边定义的属性都默认是类属性(类似于c++的static变量)。
而python实例又可以灵活的随便增加属性,便出现了图片中看似诡异的现象。
---------------------------------
我们来看一下他的原代码:
你觉得输出会是什么?
结果是
model_path
分别是
"xx_model"

"oo_model"
而model_dict全都是第二次调用的结果,也就是oo_model生成的dict的值(注意,他前边有一句self.model_dict.clear()

原因是什么呢?
"坑"
就在
他是用self.xxxx
这种方式引用变量,而不是self.__class__.xxxx
(1)
self.model_path=path;
#这对self.model_path进行了赋值,python中的第一次赋值视为变量的定义!
(2)
self.xxxx这种格式的第一次赋值含义是什么呢?-->含义是:定义,也就是说定义了一个名为xxxx的实例属性。
(3)
因此m1,m2的两次调用,分别定义了对应的(不同的)self.model_path属性。
而self.model_dict,从头到尾都是
引用
它,从未进行过
赋值(重定义),所以引用的都是
类属性
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式