对象与类的作用域 || is运算符

看到书上p121的一个例子,mark一下

>>> class MemberCounter:
    members = 0
    def init(self):
        MemberCounter.members += 1


>>> MemberCounter .members
0
>>> m1 = MemberCounter ()
>>> m1.init()
>>> m1.members
1
>>> MemberCounter .members
1
>>> m2 = MemberCounter ()
>>> m2.init()
>>> m2.members
2
>>> m1.members
2
>>> MemberCounter .members
2
>>> m2.members = 'two'
>>> m1.members
2
>>> m2.members
'two'
>>> MemberCounter .members
2

  就我目前的理解,m1.members 和未被修改的m2.members实际上就是 MemberCounter .members,相当于在“局部作用域内直接访问全局作用域”,所以当修改了m2.members时,就相当于是在对象的作用域内创建了一个members,屏蔽了类的members

  在思考的过程中我想用is来判断时,发现有一个地方理解错了,正确的理解:
所有不可变对象,当值相同的时候,实际上就是引用的同一个东西,
如 x==1,y==1,那么x is y == True


#https://zhidao.baidu.com/question/236197136.html

Python中的对象包含三要素:id、type、value
其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值
is判断的是a对象是否就是b对象,是通过id来判断的
==判断的是a对象的值是否和b对象的值相等,是通过value来判断的
如下代码或许可以帮助你理解。
>> a = 1
>> b = 1.0
>> a is b
False
>> a == b
True
>> id(a)
12777000
>> id(b)
14986000
>> a = 1
>> b = 1
>> a is b
True
>> a == b
True
>> id(a)
12777000
>> id(b)
12777000
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值