python成员变量_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) # 也不会对类变量有影响,打印 我是类变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值