Python进阶(三)--global和类属性

时间:2022-12-21 18:49:15

global关键字

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

Python进阶(三)--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、类的实例对象在进行变量查找的时候,会先查找实例属性(变量),然后才会去查找类属性。所以若实例有同名的属性,则不会调用类属性,则会达不到预期结果。

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

Python进阶(三)--global和类属性

结果为:

Python进阶(三)--global和类属性

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

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

Python进阶(三)--global和类属性

为什么会是这样呢?

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

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

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. 软件产品案例分析(K米 APP)

    关于 K米 -- 的案例分析 产品 K米的APP (全国KTV点歌,手机直播,互动,交友,预订)的Android客户端 第一部分 调研,评测 评测: 上手体验 第一次用这一类的软件,之前去KTV的时候 ...

  2. 【Andorid开发框架学习】之Mina开发之服务器开发

    下午那篇博客我们讲到了Mina的客户端的开发,如果还有没看过的同学可以看一下,我是传送门.现在,我们来学习一下,Mina的服务器的开发. 一.首先看一下,我的服务器的代码图片:  服务器代码我是在My ...

  3. TWinControl.WMNCPaint对非客户的绘制

    混个脸熟: procedure TWinControl.WMNCPaint(var Message: TMessage); const InnerStyles: , BDR_SUNKENINNER, ...

  4. Silverlight的DataGrid合并单元格

    现在也不知道还有没有同学做Silverlight开发了,我是一个Silverlight菜鸟,遇到问题也很难百度查到.就简单的记录一下这两天遇到的问题,并做了一个简单的小Demo,希望能够帮助到其他同学 ...

  5. R语言读取JSON数据

  6. HMM(隐马尔科夫模型)与分词、词性标注、命名实体识别

    转载自 http://www.cnblogs.com/skyme/p/4651331.html HMM(隐马尔可夫模型)是用来描述隐含未知参数的统计模型,举一个经典的例子:一个东京的朋友每天根据天气{ ...

  7. Rspec: everyday-rspec实操: 第9章 快速编写测试,编写快速的测试。

    Make it work, make it right, make it fast. 测试运行的时间.应用和测试组件的增长,速度会越来越慢,目标是保持代码的readable, maintainable ...

  8. POJ - 1061 扩展gcd

    题意:求\((n-m)t+Lk=x-y\)的解\(t\) #include<iostream> #include<algorithm> #include<cstdio&g ...

  9. Linq GroupJoin &comma; Join

    static void Main(string[] args) { List<Person> persons = new List<Person> { }, }, }; Lis ...

  10. Android Weekly Notes Issue &num;318

    Android Weekly Issue #318 July 15th, 2018 Android Weekly Issue #318 本期内容包括: Android Navigation Compo ...