今天在看python学习手册时看到了两句话:
一(第26章中“类对象提供默认行为”)
二(第26章中“实例对象是具体的元素”)
书中给的例子是这样的:
但上网查了一下好像第二句话不是非常准确,如下面的文章
原文:https://www.jb51.net/article/112525.htm
在此之上继续验证了下:
class father:
count = 0
l= []
def funa(self):
self.count += 1
self.l.append('a')
father.count += 3
father.l.append("b")
if __name__ == "__main__":
fa = father()
fa.funa()
print(fa.count)
print(fa.l)
print(father.count)
print(father.l)
fb = father()
fb.funa()
print(fb.count)
print(fa.l)
print(father.count)
print(father.l)
运行结果如下:
1
['a', 'b']
3
['a', 'b']
4
['a', 'b', 'a', 'b']
6
['a', 'b', 'a', 'b']
可以看出来这里的funa虽然有self参数,按照上面的提到的第二句话,应该创建和修改fa实例内的数据,但实际上对于可变类型、成员变量l而言,并非如此,操作实例中的l与操作类中l是一块内存。
所以,我个人理解,在作者所说的第二句话后面,应该追加上“同时遵循数据储存机制”
或者说,对于self会创建和修改实例内的数据,但该数据可能与类对象是共享内存的。
不知道书中后续时候有相应的详细解释,暂且先这样,如果理解不到位,后续再修改!