对象和实例的区别_在__init__中定义成员与在python中类主体中定义成员之间的区别?...

做之间有什么区别

class a: def __init__(self): self.val=1

去做

class a: val=1 def __init__(self): pass
6a0e3a52a625e5cba660f32ce8ee3c7a.png

解决方案


class a: def __init__(self): self.val=1

这会创建一个类(在Py2中,是一个粗鲁的,遗留的,老式的,不要那样做!类;在Py3中,讨厌的旧遗留类最终消失了,所以这将是一个唯一的类- -** good *类型,class a(object):在Py2 中需要),以便每个实例以对整数object的引用开头1。

6eeba052baa0bd0c929b3f34bb7a216e.png
class a: val=1 def __init__(self): pass

这将创建一个(同类型的)类,该类本身具有对整数对象的引用1(其实例始于每个实例的引用)。

对于像int值这样的不可变对象,很难看到实际的差异。例如,无论哪种情况,如果您以后self.val = 2对的一个实例执行操作a,都会引用一个实例(在这方面,现有答案严重错误)。

bdb54b5c30b2d532a83b96c232b8e843.png

区分对于可变对象很重要,因为它们具有mutator方法,因此知道某个列表是每个实例唯一的还是在所有实例之间共享的,这一点至关重要。但是对于不可变的对象,由于您永远不能更改对象本身,而只能进行分配(例如,to self.val,它将始终按实例进行引用),因此它很小。

几乎与不变项唯一相关的区别是:如果您稍后分配a.val = 3,则在第一种情况下,这将影响self.val每个实例所看到的内容(已为其self.val 分配了自己的实例或等效动作的实例除外);在第二种情况下,它不会影响self.val任何实例所看到的结果(除了您已执行的实例del self.val或等效操作之外)。

最后多说一句,小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值