看到书上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