python构造函数和析构函数_Python与C++构造函数的区别

作者得出的区别是,就Python语言而言,在输入__init__之前,就有一个指定类型的有效对象。因此,它不是一个“构造函数”,因为在C++和理论上,构造函数将一个无效的、预先构造的对象转换成一个“正确”的完成的对象。在

基本上,在Python中,{{*CD2}}被定义为返回“新对象实例”,而C++新操作符只返回一些内存,而这不是任何类的实例。在

然而,Python中的__init__可能是您首先建立一些重要的类不变量的地方(它有哪些属性,仅供初学者使用)。因此,就您的类的用户而言,它可能是一个构造函数。只是Python运行时不关心这些不变量中的任何一个。如果你愿意的话,它对构造对象的构成标准很低。在

我认为作者的观点是公平的,这无疑是关于Python创建对象的方式的一个有趣的评论。这是一个很好的区别,但是我怀疑调用__init__构造函数是否会导致代码损坏。在

另外,我注意到Python文档将__init__作为构造函数(http://docs.python.org/release/2.5.2/ref/customization.html)在

^{bq}$

。。。因此,如果将__init__看作构造函数有任何实际问题,那么Python就有麻烦了!在

Python和C++构建对象的方式有一些相似之处。两者都调用一个职责相对简单的函数(__new__用于对象实例,而operator new的某个版本用于原始内存),然后两者都调用一个函数,该函数有机会做更多的工作来将对象初始化为有用的状态(__init__而不是构造函数)。在

实际差异包括:>P>在C++中,如果需要,则不需要按适当的顺序自动调用基类的ARG构造函数,而对于Python中的{{CD1>},则必须在自己的^ {{CD1>}中显式地将基项引入其中。即使在C++中,如果有参数,也必须指定基类构造函数。< C++ >中,当构造函数抛出异常时,您有一个完整的机制,就调用已经构建的子对象的析构函数而言。在Python中,我认为运行时(最多)调用__del__。

还有一个区别是__new__不仅仅是分配内存,它必须返回一个实际的对象实例。Python也不是内存的概念。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值