python类的成员变量_Python的类成员变量

Python成员变量

定义的成员变量,如果通过类名访问,影响的是全局的静态变量

如果通过实例(self)访问,影响的是当前实例的对象

在所有成员函数之外直接定义的变量(不加self)将成为类变量

如果成员函数内通过self赋值过,则为实例变量

对于容器型数据结构,如列表、map、元组,类变量和实例变量的差异较大。如下程序:

class c():

w = 0

s = []

def __init__(self):

pass

def setw(self,x):

self.w = x

def appends(self,x):

self.s.append(x)

if __name__ == "__main__":

a = c()

b = c()

a.setw(1)

b.setw(2)

a.appends(1)

print(a.w)

print(a.s)

print(b.w)

print(b.s)

此时输出为

1

[1]

2

[1]

在setw函数中,w的值通过self进行了赋值,此时w变成了实例变量

而对于s,虽然在成员函数中修改了s的内容,但没有给s赋值(我理解为变量指针没有改变,只是改变指针指向的地址里的内容),因此此时s仍然是类变量,对a实例中s的修改,影响了b实例

如果构造函数改为:

def __init__(self):

self.s = [1,2,3]

则输出为

1

[1, 2, 3, 1]

2

[1, 2, 3]

或者将appends函数改为:

def appends(self,x):

self.s = [x]

self.s.append(x)

此时输出为:

1

[1]

2

[]

此时s变成了实例变量,对a实例的修改不影响b实例

类变量可以通过类名直接访问,对于没有在成员函数内定义过的类变量,对其修改会影响所有的类实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值