python的类属性和实例属性

本文探讨了Python中类属性与实例属性的区别及其在代码实现中的应用。通过具体示例展示了如何正确使用这两种属性,避免因混淆导致的问题。
部署运行你感兴趣的模型镜像

今天一同事说踩了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,从头到尾都是 引用 它,从未进行过 赋值(重定义),所以引用的都是 类属性

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值