Python中类变量和实例变量的区别

目录
  • 一、前言
  • 二、解决过程
  • 三、总结

一、前言

有人提问了一个关于Python类变量和实例变量的问题,这里拿出来给大家分享下,一起学习。

是用英文提问的,当然了英文看上去也不难,有点二级英文基础,也看得懂,实在不行,在线翻译一下也问题不大了。

二、解决过程

这里主要涉及到三个部分,类属性,实例属性,及实例属性的引用对象指向性问题。在该例中counter为类属性,__first为实例属性,print函数中的counter为实例属性的引用对象指向性问题。当ExampleClass类实例化时,__init__魔法函数会自动执行其下方的代码段,而下方代码段涉及到两种属性的变化,实例属性为该实例化对象特有的,即实例化完成后才会存在,每个实例化对象之间的实例属性是独立的,从你下方的print打印结果也能看出,实例对象.__dict__输出当前实例化对象的实例属性。而类属性只要定义完类,就已经存在,使用类.类属性可以引用该类属性,也可以进行修改,类属性是所有实例化对象共享的,在此例中每次实例化类后,ExampleClass.counter都会加1,在三次print中能看到输出值都是一样。

在这里还多了一些拓展

__init__中,在ExampleClass.counter += 1前添加了一行self.counter += 1;这里说明下实例属性的引用方式,在类实例化后,首先引用实例属性已有的,而如果找不到会往上寻找,即找类属性,在修改后的代码里,我为实例对象增加了一个实例属性counter,在print里的实例对象.__dict__也能看到实例属性中存在counter,而此时实例对象.counter引用到的是实例属性,而非类属性。这里再说一下为什么self.counter += 1能够正常执行,上述说到实例属性的引用会向上寻找,则进行+= 1计算时,会引用类属性,第一次实例化中,类属性下的counter为0,加1后赋值给实例属性下的counter,那么第一个实例对象的counter打印出来就是1,第二次实例化,在第一次实例化的过程中,类属性下counter也进行了加1,反映到第二次中,使用到的类属性counter此时已经为1,进行加1赋值给第二次实例属性的counter,即2,第三次类似。

三、总结

这篇文章针对Python类变量和实例变量的问题,给出了具体说明和演示

总的来说,类变量:可在类的所有实例之间共享的值(也就是说,它们不是单独分配给每个实例的)。实例变量:实例化之后,每个实例单独拥有的变量。

类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象

到此这篇关于Python中类变量和实例变量的区别的文章就介绍到这了,更多相关Python类变量和实例变量内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解

    本文实例讲述了Python面向对象程序设计中类的定义.实例化.封装及私有变量/方法.分享给大家供大家参考,具体如下: 1. 定义类 python中定义一个类的格式如下: class MyClass(object): def __init__(self,data1,data2): self.__data1=data1 self.data2=data2 def __func1(self): print("MyClass类的私有方法被调用!") def print_data(self): s

  • Python面向对象程序设计之类和对象、实例变量、类变量用法分析

    本文实例讲述了Python面向对象程序设计之类和对象.实例变量.类变量用法.分享给大家供大家参考,具体如下: 类和对象: 类的定义:用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类的优势:将一个对象的功能集中于一体,便于操作,降低了代码的重复. 实例化:创建一个类的实例,类的具体对象. 对象:通过类定义的数据结构实例.对象包括两个数据成员(类变量和实例变量)和方法. 使用 class 语句来创建一个新类: class Dog: #self

  • 简单分析python的类变量、实例变量

    1.类变量.实例变量概念 类变量: 类变量就是定义在类中,但是在函数体之外的变量.通常不使用self.变量名赋值的变量.类变量通常不作为类的实例变量的,类变量对于所有实例化的对象中是公用的. 实例变量: 实例变量是定义在方法中的变量,使用self绑定到实例上的变量,只是对当前实例起作用. 2.访问 类变量 在类的内部和外部类变量都可以直接使用className.类变量的形式访问.但是在类的内部,也可以使用self.类变量来访问,但是这个是用含义就不同了(后面使用代码验证). 实例变量 在类的内部

  • Python 变量类型实例详解

    目录 1.变量赋值 2.多个变量赋值 3.标准数据类型 4.Python 数字 5.Python字符串 6.Python列表 7.ython 元组 8..Python 字典 9.Python数据类型转换 前言: 变量存储在内存中的值,这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符. 1.变量赋值 Python 中的变量赋值不需要类型声明. 每个变量在内

  • python子类如何继承父类的实例变量

    类型1:父类和子类的实例变量均不需要传递 class A(object): def __init__(self): self.name = "cui" def get_name(self): return self.name class B(A): def __init__(self): super(B,self).__init__() self.age = 12 b = B() 类型2:父类的实例变量不需要传递,子类的实例变量需要传递 class A(object): def __i

  • Python小白不正确的使用类变量实例

    不正确的使用类变量 看下面一个例子: >>> class A(object): ... x = 1 ... >>> class B(A): ... pass ... >>> class C(A): ... pass ... >>> print A.x, B.x, C.x 1 1 1 看起来没有问题. >>> B.x = 2 >>> print A.x, B.x, C.x 1 2 1 嗯哈,还是和预想

  • python实现类的静态变量用法实例

    本文实例讲述了python类的静态变量用法.分享给大家供大家参考.具体分析如下: 这里使用静态变量目的是在类中实现一个静态的队列,这里用数组实现,任何时候插入到队列中的数据不会和类的实例有直接关系. __author__ = 'Administrator' class CaptchaImage: def queue(self,arr=list()): return arr def InsertCode(self,code): self.queue().append(code) if __name

  • Python基础之高级变量类型实例详解

    本文实例讲述了Python高级变量类型.分享给大家供大家参考,具体如下: 目标 列表 元组 字典 字符串 公共方法 变量高级 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) 真 True 非 0 数 -- 非零即真 假 False 0 复数型 (complex) 主要用于科学计算,例如:平面场问题.波动问题.电感电容等问题 非数字型 字符串 列表 元组 字典 在 Python 中,所有 非数字型变量 都支持以

  • Python中类变量和实例变量的区别

    目录 一.前言 二.解决过程 三.总结 一.前言 有人提问了一个关于Python类变量和实例变量的问题,这里拿出来给大家分享下,一起学习. 是用英文提问的,当然了英文看上去也不难,有点二级英文基础,也看得懂,实在不行,在线翻译一下也问题不大了. 二.解决过程 这里主要涉及到三个部分,类属性,实例属性,及实例属性的引用对象指向性问题.在该例中counter为类属性,__first为实例属性,print函数中的counter为实例属性的引用对象指向性问题.当ExampleClass类实例化时,__i

  • python“静态”变量、实例变量与本地变量的声明示例

    前言 虽然各种编程语言之间大部分语法存在共通的地方,但是在一些细节的处理上还是千差万别 才接触Python不久(之前是学Java的),实在想吐槽一下语言之间编码格式上的不统一问题,比如Java用分号分隔代码块,Python用空格,这无形之中增加了编码人员的学习成本 作为初学人员,还是老老实实记录一下学习过程中的坑:) 1. "静态"变量的声明 这里的静态变量是借用Java中静态变量的概念(不知道Python中的具体概念是什么),指既可以通过类名直接进行访问,也可以通过类的实例进行访问的

  • C#静态变量与实例变量实例分析

    本文实例讲述了C#静态变量与实例变量的具体用法,分享给大家供大家参考.具体分析如下: 1)在语法定义上的区别: 类变量也叫静态变量,静态变量前要加static关键字,而实例变量前则不加: 实例变量也叫对象变量,即没加static 的变量: 2)在程序运行时的区别: 实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量.静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态

  • java中静态变量和实例变量的区别详细介绍

    运行效果: 控制台效果: ================================================== 代码部分 ================================================== /hello_test/src/com/b510/test/StaticTest.java 复制代码 代码如下: /**  *   */ package com.b510.test; /**  * 在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例

  • Ruby中类变量和实例变量的比较

    1.类变量名以@@开始,一个类变量被这个类所有的实例对象共享;实例变量名以@开始,每个实例对象有各自不同的实例变量; 2.类变量在使用前必须初始化,否则在使用时会报错;而实例变量如果没有初始化,则使用时返回nil; 3.类变量是私有的,在类外无法直接访问,可以通过类方法和实例方法访问; 复制代码 代码如下: class B     @@number = 11     @@num = 22       def my_method      #定义实例方法         puts @@number

  • 浅谈静态变量、成员变量、局部变量三者的区别

    静态变量和成员变量的区别: A:所属不同 静态变量:属于类,类变量    成员变量:属于对象,对象变量,实例变量 B:内存位置不同 静态变量:方法区的静态区    成员变量:堆内存 C:生命周期不同 静态变量:静态变量是随着类的加载而加载,随着类的消失而消失    成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失 D:调用不同 静态变量:可以通过对象名调用,也可以通过类名调用    成员变量:只能通过对象名调用 成员变量和局部变量的区别: A:在类中的位置不同 成员变量:在类中方法

  • JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析

    本文实例讲述了JS中类的静态方法,静态变量,实例方法,实例变量区别与用法.分享给大家供大家参考,具体如下: 1.类的静态方法 先来段代码之后分析 // JS类静态函数 function BaseClass() { } // 类添加add函数 BaseClass.add = function() { console.log("BaseClass add()方法被调用"); }; // 类方法(类的静态函数)直接调用 // 类名.类方法名 BaseClass.add(); //BaseCl

  • Ruby类实例变量、类实例方法和类变量、类方法的区别

    在Ruby中类实例变量.类实例方法和类变量.类方法的区别比较微妙,而且用法也有相当的区别.本文探讨一下他们的定义和基本的使用场景,以抛砖引玉...   一.类实例变量和类变量   类变量大家都很熟悉了,就是在类定义中用@@开头的变量.类变量是用于存储类的全局信息,它只属于类,不同与类实例变量(即用@开头定义的变量)每一个类的对象都有一份数据. 类变量是可以被继承的,也就是说如果我们派生一个子类,那么在子类中是可以访问父类的类变量的.子类和父类共享一份数据,对一个类的修改会反映到另一个类中.如下边

  • python中类变量与成员变量的使用注意点总结

    前言 最近在用python写一个项目,发现一个很恶心的bug,就是同由一个类生成的两个实例之间的数据竟然会相互影响,这让我非常不解.后来联想到java的类有类变量也有实例变量,因此翻阅了相关资料,发现python也有类似的类变量和实例变量,下面来看看详细的介绍. 看下面的示例代码: class A: x = 0 def __init__(self): self.y = 0 x就是类变量,y就是实例变量. 原则上是没有错的,但是实际用的时候就发现一些恶心的问题(也就是我找了三天的bug)...比如

随机推荐