Python——成員變量


一、類變量

在類命名空間內定義的變量就屬於類變量,python允許使用類來修改、讀取類變量。

例:

class a:
	b = '我是類變量'
	def c(self):
		print (a.b)	# 通過類訪問類變量b

print (a.b)    # 通過類訪問類變量,打印 我是類變量

A = a()
A.c()    # 打印 我是類變量

a.b = '我被修改了'  # 修改類變量
A.c()  # 打印 我被修改了

其實,Python也可以使用對象來訪問所屬類的變量,實際上通過對象訪問類變量,本質還是通過類名訪問類變量,例:

class a:
	b = '我是類變量'
	def c(self):
		print (self.b)	# self訪問a類的類變量,self代表c方法的調用者a對象

A = a()
print (A.b)    # 通過對象訪問類變量b,打印 我是類變量

A.c()    # 打印 我是類變量

A.b = '我又被修改了'  # 通過對象修改類變量
A.c()  # 如果通過對象對類變量進行修改,那么訪問這些對象的類變量也會讀到修改后的值 打印 我又被修改了
print (A.b)  # 打印 我又被修改了

print (a.b)  # 通過類訪問類變量,可以看出程序對對象的類變量修改了值,只會在該對象中生效,打印 我是類變量

  

二、實例變量

先看一段代碼:

class a:
	b = '我是類變量'
	def c(self,b):
		self.b = b
		print (self.b)

A = a()
A.c('我是實例變量')    # 打印 我是實例變量
print (A.b)    # 打印 我是實例變量

print (a.b)    # 打印 我是類變量

a.b = '我怎么又被修改了!'  # 通過類修改類變量
A.c('我仍然是實例變量!')  # 不會對實例變量造成任何影響,打印 我仍然是實例變量!

在上面代碼中,

1、self.b = b 看上去像是對類變量進行賦值,但實際上是重新定義了兩個實例變量,print (A.b)由於在調用a對象的c()方法之后,該對象本身已經有b這個實例變量,程序會輸出實例變量;

2、print (a.b)通過a來訪問他的b變量,此時才是在訪問類變量;

3、最后兩段代碼,即使程序通過類修改類變量,也不會對實例變量造成任何影響。

同樣,對一個對象的實例進行修改,也不會影響到類變量和其他對象的實例變量,例:

class a:
	b = '我是類變量'
	def c(self):
		self.b = '我是實例變量'
		print (self.b)

A = a()
B = a()
A.c()    # 打印 我是實例變量
B.c()     # 打印 我是實例變量
A.b = '我是實例變量,我被修改了'
print (A.b)   # 只是對這個對象的實例變量b進行了修改,打印 我是實例變量,我被修改了
print (B.b)    # 不會影響到其他對象的實例變量,打印 我是實例變量
print (a.b)    # 也不會對類變量有影響,打印 我是類變量

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM