做网站公司教程,wordpress做支付宝,网络规划与设计需求分析,徐州睢宁建设网站第7.12节 可共享的Python类变量一、 引言在上节已经引入介绍了类变量和实例变量#xff0c;类体中定义的变量为类变量#xff0c;默认属于类本身#xff0c;实例变量是实例方法中定义的self对象的变量#xff0c;对于每个实例都是独有数据#xff0c;而类变量是该类所有…第7.12节 可共享的Python类变量一、 引言在上节已经引入介绍了类变量和实例变量类体中定义的变量为类变量默认属于类本身实例变量是实例方法中定义的self对象的变量对于每个实例都是独有数据而类变量是该类所有实例共享的属性和方法。二、 类变量的定义方式类变量的定义其实就是对变量赋值有如下方式可以进行类变量的定义1. 在类体代码中直接用变量名赋值。类体代码是在类定义时执行2. 在实例方法中(含构造方法和普通方法)直接用“类名.变量名”方式赋值3. 在类方法中直接用“类名.变量名”或“cls.变量名”方式赋值关于cls请参考下面“类方法”章节的解释4. 在类外调用方代码中直接用“类名.变量名”方式赋值。注意类变量无论是哪种方法定义后会立即对该类所有实例对象产生影响所有实例无论是类变量定义前就产生的实例还是类变量定义后的实例都可以访问该变量。三、 类变量的访问方式类变量的访问方式与类变量的定义方式有2点不同一是因为类体代码仅在类定义时执行因此不能在类定义后再通过类体代码访问二是类变量可以在类外调用方通过实例方式访问。具体支持的访问方式如下1. 在实例方法中(含构造方法和普通方法)直接用“类名.变量名”方式访问2. 在类方法中直接用“类名.变量名”方式访问3. 在类外调用方代码中直接用“类名.变量名”方式访问4. 在类外调用方代码中直接用“实例名.变量名”方式访问注意这种方式不能用来直接赋值只能读取如果是赋值就变成了实例变量的定义。从以上说明中可以得知1. 类变量是可以在类定义的实例方法和类方法、以及类外调用时动态增加并且一旦增加对所有已经定义及后续需要新定义的实例变量都可见2. 程序通过对象访问类变量其本质还是通过类名在访问类变量但如果类变量和实例变量重名时必须通过类名才能访问类变量。这是因为Python总是先到实例对象中查找属性再到类属性中查找属性有点类似局部变量和全局变量的关系3. Python 允许通过对象访问类变量但如果程序通过对象尝试对类变量赋值此时性质就变了Python 是动态语言赋值语句往往意味着定义新的实例变量。因此如果程序通过对象对类变量赋值其实不是对“类变量赋值”而是定义新的实例变量。如果把类当成类命名空间那么类变量其实就是定义在类命名空间内的变量 Python 可以使用类来读取、修改类变量。对于类变量而言它们就是属于在类命名空间内定义的变量因此程序不能直接访问这些变量主要使用类名的方式来访问类变量同时Python 完全允许使用实例对象来访问该对象所属类的类变量但Python主要推荐使用类名访问类变量。因此老猿强烈建议大家使用类名访问类变量使用实例方式访问很容易出错大家可以结合下面的举例好好理解一下。四、 举例1、 定义一个类VarTest和实例在类体代码中对类变量classvar赋值class VarTest():classvarclassvar在类体代码赋值定义个实例varVarTest()2、 查看相关变量的值查看var.classvar和VarTest.classvar的值都显示为classvar在类体代码赋值执行var.classvar is VarTest.classvar返回True3、 执行赋值语句var.classvarclassvar在类外通过实例赋值4、 再次查看相关变量的值此时查看var.classvar和VarTest.classvar的值二者已经不同一个是classvar在类外通过实例赋值一个是classvar在类体代码赋值执行var.classvar is VarTest.classvar返回False相关代码执行截图5、 如果上面第3个步骤不是通过直接给变量赋值而是先引用再赋值会怎么样看下面代码的执行情况注本次新定义一个实例可以看到最开始的var1.classvar和VarTest.classvar是同一个变量执行var1.classvar的操作语句这个语句的效果等同于“var1.classvarvar1.classvar 在类体外通过实例访问类变量”可以看到执行后还是新定义了一个实例变量。本节介绍了类变量的定义和使用方法并举例进行了说明虽然类变量的定义和访问可以通过实例方式进行但老猿强烈推荐大家按类名方式进行定义和访问。老猿Python(https://blog.csdn.net/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。欢迎大家批评指正谢谢大家关注