global关键字

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

python的类属性

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

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

  

 #!coding:utf8

 class A(object):
a = 1
def __init__(self):
pass if __name__ == '__main__':
test = A()
print test.a
print A.a

结果均输出1

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

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

结果为:

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

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

为什么会是这样呢?

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

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

Python进阶(三)--global和类属性的更多相关文章

  1. python进阶01 面向对象、类、实例、属性封装、实例方法

    python进阶01 面向对象.类.实例.属性封装.实例方法 一.面向对象 1.什么是对象 #一切皆对象,可以简单地将“对象”理解为“某个东西” #“对象”之所以称之为对象,是因为它具有属于它自己的“ ...

  2. Python进阶(三)----函数名,作用域,名称空间,f-string,可迭代对象,迭代器

    Python进阶(三)----函数名,作用域,名称空间,f-string,可迭代对象,迭代器 一丶关键字:global,nonlocal global 声明全局变量: ​ 1. 可以在局部作用域声明一 ...

  3. 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感

    关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...

  4. Python进阶(三十五)-Fiddler命令行和HTTP断点调试

    Python进阶(三十五)-Fiddler命令行和HTTP断点调试 一. Fiddler内置命令   上一节(使用Fiddler进行抓包分析)中,介绍到,在web session(与我们通常所说的se ...

  5. Python进阶——详解元类,metaclass的原理和用法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题第18篇文章,我们来继续聊聊Python当中的元类. 在上上篇文章当中我们介绍了type元类的用法,在上一篇文章当中我 ...

  6. Python 中的引用和类属性的初步理解

    最近对Python 的对象引用机制稍微研究了一下,留下笔记,以供查阅. 首先有一点是明确的:「Python 中一切皆对象」. 那么,这到底意味着什么呢? 如下代码: #!/usr/bin/env py ...

  7. Python 中使用动态创建类属性的机制实现接口之后的依赖

    我们在自动化测试中经常会需要关联用例处理,需要动态类属性: 推荐使用第二种方法: 创建:setattr() 获取:getattr() 两种,如何创建 类属性 loan_id # 第一种,创建 # 类名 ...

  8. python第四十七课——类属性和函数属性

    4.类属性和对象属性 类属性:定义在class内,函数外 对象属性:定义在构造函数的内部 演示:类和对象的关系 --> 生命周期 [注意]类加载早,对象加载晚 --> 晚的可以调用早的,早 ...

  9. python继承关系中,类属性的修改

    class Grandfather(object): mylist = [] def __init__(self): pass class Father(Grandfather): pass Gran ...

随机推荐

  1. jQuery工具函数(转)

    原文地址:http://www.cnblogs.com/kissdodog/archive/2012/12/27/2835561.html 作者:逆心 ------------------------ ...

  2. Spring

    Spring 一个支持DI/IOC和AOP的开源容器框架 特点 DI/IOC DI 依赖注入(组件以特定方式接收来自容器的资源注入) IOC 控制反转(反转资源获取的方向) AOP 面向切面编程 开发 ...

  3. PHP中GPC

    PS:PHP中绕过GPC的情况有很多,本文仅仅是总结了一些比较常见的,而且写的很浅[因为本人水平有限],欢迎大家积极拍砖:) 1.通过数据库(文本)中转 通过数据库中转: [注意存入数据库和selec ...

  4. Android 广播 BroadcastReceiver

    Android 系统里定义了各种各样的广播,如电池的使用状态,电话的接收和短信的接收,开机启动都会产生一个广播.当然用户也可以自定义自己的广播. 既然说到广播,那么必定有一个广播发送者,以及广播接收器 ...

  5. 论AVL树与红黑树

    首先讲解一下AVL树: 例如,我们要输入这样一串数字,10,9,8,7,15,20这样一串数字来建立AVL树 1,首先输入10,得到一个根结点10 2,然后输入9, 得到10这个根结点一个左孩子结点9 ...

  6. oracle 11g如何完全卸载

    方法/步骤   停用oracle服务:进入计算机管理,在服务中,找到oracle开头的所有服务,右击选择停止   在开始菜单中,找到Universal Installer,运行Oracle Unive ...

  7. 渗透日记-利用SQLMAP伪静态注入

    今日找到一个网站,做下安全检测,url是这样的: 不是传统的.php结尾,所以很多人认为这个不能注入,其实伪静态也能注入的,这个url虽然做了伪静态,但是还是需要传递参数到数据库去查询的,试试能否注入 ...

  8. [osx] 设置crontab

    比较坑爹,直接使用 crontab -e 设置是没有效果的,只能这样设置 env EDITOR=vi crontab -e Have fun with Max OSX

  9. SSIS变量属性中EvaluateAsExpression设置的作用

    我们在做SqlServer SSIS包开发的时候,经常会用到SSIS的变量,我们可以使用和修改SSIS变量的值使得SSIS包的逻辑更灵活,如下图所示: 在定义SSIS变量的时候可以使用固定值(如上图中 ...

  10. Oracle sql语句执行顺序

    sql语法的分析是从右到左 一.sql语句的执行步骤: 1)词法分析,词法分析阶段是编译过程的第一个阶段.这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构 ...