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. Python —条件语句

    条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: Python程序语言指定任何非0和非空(null ...

  2. My 1st webUI try

    1. Add three control to the UI: StartTime EndTime Weekdays: 2015-11-17 20:26:40 data-model: Html5在ht ...

  3. 服务器支持AspJpeg和JMail45_free.msi组件

     解决办法: 1.在服务器上安装上AspJpeg和JMail45_free.msi后, 2.在cmd中输入regsvr32 c:/windows/SysWOW64/aspjpeg.dll 3.把网站对 ...

  4. JavaWeb-springMVC

    <context:component-scan/> 扫描指定的包中的类上的注解,常用的注解有: @Controller 声明Action组件@Service    声明Service组件  ...

  5. Elasticsearch 聚合

    桶(bucket)聚合 满足条件的结果集合.桶可以嵌套 标(metric)聚合 满足条件的结果集合的一些指标.如count,max等.

  6. java.sql.SQLException: Incorrect key file for table 'C:\Windows\TEMP\#sql578_6e2_68d.MYI'; try to repair it

    java.sql.SQLException: Incorrect key file for table 'C:\Windows\TEMP\#sql578_6e2_68d.MYI'; try to re ...

  7. 刷新各ifream当前页,下拉项改变触发事件js,给选中项加背景色js

    <script type="text/javascript" language="javascript"> //刷新框架各页面 function r ...

  8. DKIM对发送邮件的好处及使用方法

    关于DKIM: What is DKIM? 简单的来说dkim有益于增加邮件服务供应商中的反垃圾邮件系统评分,减少邮件内容被评为垃圾邮件的概率. 但使用它不等同于不会被评为垃圾邮件.另外,邮件的发送次 ...

  9. scrapy的scrapyd使用方法

    一直以来,很多人疑惑scrapy提供的scrapyd该怎么用,于我也是.自己在实际项目中只是使用scrapy crawl spider,用python来写一个多进程启动,还用一个shell脚本来监控进 ...

  10. C#中常用的转义字符及@符号的一些作用

    转义符指的就是一个'\'+一个特殊的字符,组成了一个具有特殊意义的字符. \n:表示换行.  /b表示一个退格键.放到字符串两边没有效果. \t:表示tab键的空格 \":表示一个英文半角的 ...