python类属性和实例属性_python中类属性与实例属性的区别

python的类属性与实例属性,初学者很容易搞混,在这里,平哥给大家举个例子就能很好的理解了。我们以人为例,正常的人类都是两条胳膊两条腿。先定义一个人类:

class Person::::::::::legs = 2 #类属性:::::::::def __init__(self, name)::::::::::::::::self.name = name # 实例属性self.name

注意一下注释里面说明,哪些是类属性,哪些是实例属性,由self.xxxx的都是实例属性

然后实例化二个人,一个叫张三,一个叫李四

zhangsan = Person("张三")lisi = Person("李四", )

我想这里大家应该是没有疑问的

然后如下操作:

print(zhangsan.name) # 输出张三print(zhangsan.legs) # 输出2print(lisi.name) # 输出李四print(lisi.legs) #输出2

这里大家应该也没有疑问,如果有疑问就是类的定义与实例使用还没有掌握,可以看平哥的手册

现在大家思考下面的代码会发生什么?

Person.legs = 4#修改了类属性的值print(zhangsan.legs) #输出多少print(lisi.legs) # 输出多少

这里的答案是4, 因为legs是类的属性,所有的实例共同享有这一属性值,修改后,所有实例的该值就会立即变化。

接下来再看下面这段代码:

zhangsan.name = "王五"print(lisi.name) #这里输出李四还是王五?# 也就是实例张三改名会不会影响李四的名字

答案是“李四 ”,不受影响,否则,就乱套了。

这是为什么呢?就是因为name是实例属性,每个实例的实例属性都是独立的,每个实例无论是创建还是修改还是销毁实例属性,都不会影响其他实例

要注意的问题是什么?

zhangsan.legs = 100# 张三很无聊,修改了legs的值print(lisi.legs)# 李四现在有几条leg?

答案:还是4条,那有同学要问了,legs不是类的属性吗,一旦修改,所有的实例都跟着修改。这句话非常正确,错误的地方是因为zhangsan.legs = 100之后,事实上并没有修改Person.legs,而是自己创建一个新的实例属性legs。此legs已经不是原来的legs了。大家可以想一下在函数内部的全局变量的取值与修改的情况,是一个道理。

e7cd7b899e510fb3fda5fa3359597491d0430c41.png?token=e0da3ba3cdf151c5b31a2f470d53105c&s=F9FCA746D49269FB584E467A0300807F跟着平哥免费学python

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值