博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python进阶(三)--global和类属性
阅读量:5208 次
发布时间:2019-06-14

本文共 1074 字,大约阅读时间需要 3 分钟。

global关键字

  一句话概括为:告诉python解释器,global声明的变量为全局作用域内定义的变量。解释器就会到全局作用域内寻找global定义的变量。

python的类属性

  类属性相当于其他OO语言的类中的静态变量,定义在类中的属性为类的所有实例所共享。

  类属性有两种访问方式:1、通过“类名.变量”的形式访问。2、通过"类实例对象.变量"访问。

  

1 #!coding:utf8 2  3 class A(object): 4     a = 1 5     def __init__(self): 6         pass 7  8 if __name__ == '__main__': 9     test = A()10     print test.a11     print A.a

结果均输出1

  但是强烈建议使用类名的方式调用,原因:1、类属性使用类名的方式调用更加规范。2、类的实例对象在进行变量查找的时候,会先查找实例属性(变量),然后才会去查找类属性。所以若实例有同名的属性,则不会调用类属性,则会达不到预期结果。

  下面大家在看看找个程序的输出结果是什么?

结果为:

其他的不需要过多的解释都是很正常,按照前面的查找理论都可以解释清楚。在这里我想和大家讲下我对类属性__var和实例属性self.__var的理解:

  首先把结论和大家说下,__var类属性和实例属性self.__var都被python解释器转换为_Test__var的名字了,所以后面在以Test.__var和t.__var的方式对其进行赋值的时候,都是向类或者对象实例中添加属性而已,这个可以通过dir的方式查看,如图: 

为什么会是这样呢?

  我是这样理解的,"."是一个运算符,在定义类的外部的操作过程是这样的(纯属臆测,爱信不信:-D):在进行赋值的时候,即进行左值运算的时候,若该属性在类中已有,则覆盖该值,若没有,则会创建该属性,并进行赋值。同时创建的属性名即为点运算符后的变量名(全部作为一个字符串),这样的双下划线只会作为字符串的一部分存在,没有任何特殊意思,而在类中,下划线会被解释为含有特殊意思,即在双下划线前加上"_类名"。总结起来感觉很像一个字典操作,其实通过__dict__属性也可以验证我的这个猜想,大部分的键即为点后面定义的变量名,而双下划线却会被转义。

 

 欢迎大家指正,共同进步。

转载于:https://www.cnblogs.com/break-python/p/6200618.html

你可能感兴趣的文章
python学习笔记:try与except处理异常语句
查看>>
windows7中的“mklink命令”
查看>>
sklearn中的损失函数
查看>>
Java线程同步操作
查看>>
Oracle控制文件操作
查看>>
“轻笔记”使用心得
查看>>
关于安装虚拟机
查看>>
GRPC 截止时间与元数据
查看>>
代码生成声音
查看>>
第一篇博客关于Log4net的配置记录
查看>>
微信小程序开发入门
查看>>
UVA 10905 Children's Game
查看>>
TensorFlow Classification 分类学习
查看>>
java位运算笔记
查看>>
java输出pdf
查看>>
set,multiset容器类型
查看>>
第三次博客作业
查看>>
ToolBarTray
查看>>
拉登是我罩的队_张正浩_郑鉴
查看>>
SpringBoot18 Swagger、API接口文档生成、WireMock、模拟后台数据
查看>>