做之间有什么区别
class a: def __init__(self): self.val=1
去做
class a: val=1 def __init__(self): pass
解决方案
class a: def __init__(self): self.val=1
这会创建一个类(在Py2中,是一个粗鲁的,遗留的,老式的,不要那样做!类;在Py3中,讨厌的旧遗留类最终消失了,所以这将是一个唯一的类- -** good *类型,class a(object):在Py2 中需要),以便每个实例以对整数object的引用开头1。
class a: val=1 def __init__(self): pass
这将创建一个(同类型的)类,该类本身具有对整数对象的引用1(其实例始于每个实例的引用)。
对于像int值这样的不可变对象,很难看到实际的差异。例如,无论哪种情况,如果您以后self.val = 2对的一个实例执行操作a,都会引用一个实例(在这方面,现有答案严重错误)。
区分对于可变对象很重要,因为它们具有mutator方法,因此知道某个列表是每个实例唯一的还是在所有实例之间共享的,这一点至关重要。但是对于不可变的对象,由于您永远不能更改对象本身,而只能进行分配(例如,to self.val,它将始终按实例进行引用),因此它很小。
几乎与不变项唯一相关的区别是:如果您稍后分配a.val = 3,则在第一种情况下,这将影响self.val每个实例所看到的内容(已为其self.val 分配了自己的实例或等效动作的实例除外);在第二种情况下,它不会影响self.val任何实例所看到的结果(除了您已执行的实例del self.val或等效操作之外)。
最后多说一句,小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。