Python类变量和实例变量,傻傻分不清楚

开发 前端
这篇文章针对Python类变量和实例变量的问题,给出了具体说明和演示,希望大家对以后的学习有所启示!

一、前言

前几天在Python最强王者交流群有个叫【Chloé】的粉丝问了一个关于Python类变量和实例变量的问题,这里拿出来给大家分享下,一起学习。

这个粉丝在法国留学,所以提问是英文的,当然了英文看上去也不难,有点二级英文基础,也看得懂,实在不行,在线翻译一下也问题不大了。

二、解决过程

这里给出【🌑(这是月亮的背面)】大佬的解答:

这里主要涉及到三个部分,类属性,实例属性,及实例属性的引用对象指向性问题。在该例中counter为类属性,__first为实例属性,print函数中的counter为实例属性的引用对象指向性问题。当ExampleClass类实例化时,__init__魔法函数会自动执行其下方的代码段,而下方代码段涉及到两种属性的变化,实例属性为该实例化对象特有的,即实例化完成后才会存在,每个实例化对象之间的实例属性是独立的,从你下方的print打印结果也能看出,实例对象.__dict__输出当前实例化对象的实例属性。而类属性只要定义完类,就已经存在,使用类.类属性可以引用该类属性,也可以进行修改,类属性是所有实例化对象共享的,在此例中每次实例化类后,ExampleClass.counter都会加1,在三次print中能看到输出值都是一样。

【月神】在这里还多了一些拓展。

在__init__中,在ExampleClass.counter += 1前添加了一行self.counter += 1;这里说明下实例属性的引用方式,在类实例化后,首先引用实例属性已有的,而如果找不到会往上寻找,即找类属性,在修改后的代码里,我为实例对象增加了一个实例属性counter,在print里的实例对象.__dict__也能看到实例属性中存在counter,而此时实例对象.counter引用到的是实例属性,而非类属性。这里再说一下为什么self.counter += 1能够正常执行,上述说到实例属性的引用会向上寻找,则进行+= 1计算时,会引用类属性,第一次实例化中,类属性下的counter为0,加1后赋值给实例属性下的counter,那么第一个实例对象的counter打印出来就是1,第二次实例化,在第一次实例化的过程中,类属性下counter也进行了加1,反映到第二次中,使用到的类属性counter此时已经为1,进行加1赋值给第二次实例属性的counter,即2,第三次类似。

三、总结

针对Python类变量和实例变量的问题,给出了具体说明和演示,顺利地帮助粉丝解决了问题。

总的来说,类变量:可在类的所有实例之间共享的值(也就是说,它们不是单独分配给每个实例的)。实例变量:实例化之后,每个实例单独拥有的变量。

类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象。

责任编辑:武晓燕 来源: Python爬虫与数据挖掘
相关推荐

2021-03-10 08:56:37

Zookeeper

2022-05-15 21:52:04

typeTypeScriptinterface

2024-02-29 09:08:56

Encoding算法加密

2021-07-27 07:31:16

JavaArrayList数组

2018-12-17 12:30:05

Kubernetes存储存储卷

2020-03-03 17:35:09

Full GCMinor

2020-10-30 08:20:04

SD卡TF卡存储

2023-09-03 21:18:07

Python编程语言

2020-11-11 07:32:18

MySQL InnoDB 存储

2023-04-11 15:57:49

JavaScriptCSSHTML

2016-11-04 12:51:46

Unix网络IO 模型

2021-11-09 06:01:35

前端JITAOT

2018-05-22 16:24:20

HashMapJavaJDK

2023-02-27 15:46:19

数据元元数据

2019-11-21 14:22:12

WiFiWLAN区别

2021-01-13 08:10:26

接口IEnumeratorIEnumerable

2021-02-08 23:47:51

文件存储块存储对象存储

2021-11-01 13:10:48

私有云混合云行业云

2021-02-14 22:33:23

Java字符字段

2021-06-07 09:20:56

Javascript运算符开发
点赞
收藏

51CTO技术栈公众号