类变量

  • 定义

    在类里面定义,且不位于构造或者成员函数里面,同时没有" self. " 的前缀;或者在类外定义,用 类名.类变量名 来新增加类变量。

  • 使用

    两种使用方法: (1)类名.类变量名(如下的 Test.a) (2)类的实例对象.类变量名(如下的 T.a)

    exp:

    class Test:
    a = 1 ### 类变量
    def __init__(self):
    self.member = 2
    def indoor(self, people):
    self.member = people T = Test()
    print(Test.a) ## 使用方法(1)
    print(T.a) ## 使用方法(2) >> 1
    >> 1
  • 作用范围

    类变量可以通过 使用方法(1)进行全局的修改(如操作1所示)

    类变量通过 使用方法(2)只能进行局部的修改(如操作2所示)

    也就是说 刚开始Test.a 和T1.a 还有 T2.a 都是指向同一地址,Test.a的修改只是修改地址里的值,而没有修改地址,而直接修改实例化对象(如T1.a 或者 T2.a)的数值,会让其实例对象的值指向新的内存空间,并且不再受到类变量Test.a的影响

    exp:

    class Test:
    a = 1 ### 类变量
    def __init__(self):
    self.member = 2
    def indoor(self, people):
    self.member = people T1 = Test()
    T2 = Test()
    print(T1.a)
    print(T2.a)
    print(Test.a)
    >> 1
    >> 1
    >> 1
    ############ 操作1 ###########
    Test.a = 1000
    print(T1.a)
    print(T2.a)
    print(Test.a)
    >> 1000
    >> 1000
    >> 1000
    ############ 操作2 ###########
    T1.a = 2000
    print(T1.a)
    print(T2.a)
    print(Test.a)
    >> 2000
    >> 1000
    >> 1000

成员变量(实例变量)

  • 定义

    在构造函数中 使用 “self.” 作为前缀的变量;或者在类的成员函数中使用“self.” 作为前缀的变量。其中前面一种定义在初始化类的时候即类实例创建的时候就产生了,而后面的定义只有当类的实例对象调用该成员函数时才被创建。

  • 使用

    在类实例化时或者在类实例调用包含有成员变量的函数时,需要给成员变量赋值。同时成员变量的使用只能使用 实例对象.成员变量名的形式(如 T.member; T.title),而不能使用类名来调用。

    exp:

    class Test:
    a = 1
    def __init__(self):
    self.member = 2 ### 构造函数中的成员变量
    def indoor(self):
    self.title = 3 ### 成员函数中的成员变量 T = Test()
    print(T.member) ## 成员变量的调用
    T.indoor() ## 先调用含有成员变量的函数
    print(T.title) ## 成员变量的调用 >> 2
    >> 3
  • 作用范围

    成员变量在不同的类实例对象之间不是全局的。对于一个类实例对象,其成员变量可以修改。也就说,一个类实例对象拥有一块存储区域用来存放成员变量,且成员变量的值可以修改,各个类实例对象的存储区不重叠且不互通。

    exp:

    class Test:
    a = 1
    def __init__(self):
    self.member = 2
    def indoor(self):
    self.title = 3
    T1 = Test()
    T2 = Test() ### 通过不同的类实例对象对于同一个成员变量进行修改 ###
    print(T1.member)
    T2.member = 5
    print(T1.member)
    print(T2.member) ### 通过不同的类实例对象对于同一个成员变量进行修改 ###
    T1.indoor()
    print(T1.title)
    T2.indoor()
    T2.title = 7
    print(T1.title)
    print(T2.title) >> 2
    >> 2
    >> 5
    >> 3
    >> 3
    >> 7

局部变量

  • 定义

    在成员函数的内部定义变量,和普通的函数的局部变量概念一致

  • 使用

    和python中其他的局部变量的使用方法一致

  • 作用范围

    只作用于该函数的内部,与普通函数的局部变量的作用域一致

    exp:

    class Test:
    a = 1
    def __init__(self):
    self.member = 2
    def indoor(self):
    total = 4 ## 局部变量;只在indoor函数内有效
    self.title = 3
    T = Test()
    T.indoor()
    print(T.total) ## 访问不到局部变量 >> Traceback (most recent call last):
    File "main.py", line 10, in <module>
    print(T.total)
    AttributeError: Test instance has no attribute 'total'

还有一件事

class Test:
a = 1
self.b = 2 ## self.b 不能定义在最外层的 self只有在类的方法中才会有 指的是类实例对象本身 所以其算不上是成员变量还是类变量
def __init__(self):
self.member = 2
def indoor(self):
total = 4
self.title = 3
T = Test()
print(T.b) >> Traceback (most recent call last):
File "main.py", line 1, in <module>
class Test(self,c):
NameError: name 'self' is not defined

Python中的类变量和成员变量的更多相关文章

  1. python中的类的成员变量以及property函数

    1 python类的各种变量 1.1 全局变量 在类外定义的变量. 1.2 类变量 定义在类里面,所有的函数外面的变量.这个变量只有一份,是所有的对象共有的.在类外用“类.”来引用. 1.3 实例变量 ...

  2. python中的类变量、实例变量

    类变量,是各个实例共享的资源,就像中央空调,只有一个,但每个房间(实例)均可享用. 实例变量,是每个实例各自分配使用的变量,每个房间(实例)都有一台空调,供自己使用. class handle(obj ...

  3. python中的类变量和对象变量,以及传值传引用的探究

    http://www.cnblogs.com/gtarcoder/p/5005897.html http://www.cnblogs.com/mexh/p/9967811.html

  4. Python 类变量和成员变量

    Python 类变量和成员变量 类与对象的方法 我们已经讨论了类与对象的功能部分,现在我们来看一下它的数据部分.事实上,它们只是与类和对象的名称空间 绑定 的普通变量,即这些名称只在这些类与对象的前提 ...

  5. python类变量与成员变量

    类变量与成员变量 关注公众号"轻松学编程"了解更多. ​ 在类中声明的变量我们称之为类变量[静态成员变量], 在__init__()函数中声明的变量并且绑定在实例上的变量我们称之为 ...

  6. [转]关于python中带下划线的变量和函数的意义

    Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格.这样就易于阅读, ...

  7. Java反射机制可以动态修改实例中final修饰的成员变量吗?

    问题:Java反射机制可以动态修改实例中final修饰的成员变量吗? 回答是分两种情况的. 1. 当final修饰的成员变量在定义的时候就初始化了值,那么java反射机制就已经不能动态修改它的值了. ...

  8. (转载)php的类中可以不定义成员变量,直接在构造方法中使用并赋值吗?

    (转载)http://s.yanghao.org/program/viewdetail.php?i=184313 php的类中可以不定义成员变量,直接在构造方法中使用并赋值吗? class block ...

  9. struts2 - View页面中获取Action的成员变量

    struts2 - View页面中获取Action的成员变量 2016年03月02日 11:04:44 IT男青年 阅读数:1074   View页面中获取Action的成员变量 按照Struts的设 ...

随机推荐

  1. Blazor组件提交全记录: FullScreen 全屏按钮/全屏服务 (BootstrapBlazor - Bootstrap 风格的 Blazor UI 组件库)

    Blazor 简介 Blazor 是一个使用 .NET 生成的交互式客户端 Web UI 的框架.和前端同学所熟知的 Vue.React.Angular 有巨大差异. 其最大的特色是使用 C# 代码( ...

  2. Java学习day17

    继续学习了IO流的一些常用类以及GUI基础 做了自己的第一个Frame窗口 在做第一个Frame窗口时程序报错:java: 无法从静态上下文中引用非静态 变量 this 查看后发现不小心把MyFram ...

  3. 使用Harr特征的级联分类器实现目标检测

    前言  最近在学习人脸的目标检测任务时,用了Haar人脸检测算法,这个算法实现起来太简洁了,读入个.xml,调用函数就能用.但是深入了解我发现这个算法原理很复杂,也很优秀.究其根源,于是我找了好些篇相 ...

  4. Spring的3级缓存和循环引用的理解

    此处是我自己的一个理解,防止以后忘记,如若那个地方理解不对,欢迎指出. 一.背景 在我们写代码的过程中一般会使用 @Autowired 来注入另外的一个对象,但有些时候发生了 循环依赖,但是我们的代码 ...

  5. Nginx作为高性能服务器的缘由以及请求过程

    Nginx作为高性能服务器的缘由以及请求过程 简介: Nginxx采用的是多进程(单线程)&多路IO复用模型,使用I/O多路复用技术的Nginx,就成了"并发事件驱动"的服 ...

  6. 《图解UE4渲染体系》Part 1 多线程渲染

    上回书<Part 0 引擎基础>说到,我们粗略地知道UE4是以哪些类来管理一个游戏场景里的数据的,但这仅仅是我们开始探索UE4渲染体系的一小步. 本回主要介绍UE4渲染体系中比较宏观顶层的 ...

  7. 看看JDK1.7与1.8的内存模型差异

    JDK1.7与1.8的区别的内存模型差异? jsk1.7的内存模型: 堆分为初生代和老年代,大小比例为1:2,初生代又分为eden.from.to三个区域,大小比例为8:1:1 方法区:有代码区.常量 ...

  8. XCTF练习题---MISC---ext3

    XCTF练习题---MISC---ext3 flag:flag{sajbcibzskjjcnbhsbvcjbjszcszbkzj} 解题步骤: 1.下载附件,观察题目,发现题目跟Linux有关,我们换 ...

  9. FreeRTOS --(9)任务管理之启动调度器

    转载自 https://blog.csdn.net/zhoutaopower/article/details/107057528 在使用 FreeRTOS 的时候,一般的,先创建若干任务,但此刻任务并 ...

  10. 【mq】从零开始实现 mq-03-引入 broker 中间人

    前景回顾 [mq]从零开始实现 mq-01-生产者.消费者启动 [mq]从零开始实现 mq-02-如何实现生产者调用消费者? [mq]从零开始实现 mq-03-引入 broker 中间人 上一节我们学 ...