Python——成员变量
程序员文章站
2023-11-30 16:12:10
一、类变量 在类命名空间内定义的变量就属于类变量,python允许使用类来修改、读取类变量。 例: 其实,Python也可以使用对象来访问所属类的变量,实际上通过对象访问类变量,本质还是通过类名访问类变量,例: 二、实例变量 先看一段代码: 在上面代码中, 1、self.b = b 看上去像是对类变 ......
一、类变量
在类命名空间内定义的变量就属于类变量,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) # 也不会影响对类变量有影响,打印 我是类变量
上一篇: VMware安装CentOS图文教程