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) # 输出2

print(lisi.name)

输出李四

print(lisi.legs)

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

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

Person.legs = 4

#修改了类属性的值

print(zhangsan.legs) #输出多少

print(lisi.legs) # 输出多少

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

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

zhangsan.name = ‘王五’

print(lisi.name)

#这里输出李四还是王五?# 也就是实例张三改名会不会影响李四的名字
答案是“李四 ”,不受影响,否则,就乱套了。

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

对Python感兴趣或者是正在学习的小伙伴,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的!从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,教你如何实现边学习边用Python赚钱的学习方式。点击加入我们的 python学习者聚集地

要注意的问题是什么?

zhangsan.legs = 100

张三很无聊,修改了legs的值

print(lisi.legs)

李四现在有几条leg?

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值