ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python中的类变量和成员变量

2022-06-16 10:35:44  阅读:175  来源: 互联网

标签:变量 Python 成员 T1 member print Test self


类变量

  • 定义

    在类里面定义,且不位于构造或者成员函数里面,同时没有" 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,成员,T1,member,print,Test,self
来源: https://www.cnblogs.com/jack-nie-23/p/16381024.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有