python类中的__init__, __new__, __del__使用

__new__(cls[,...])

__new__方法在创建对象时,自动调用,起创建作用,创建完成,返回创建的对象

  • __new__至少有一个参数cls,代表实例化的类,此参数在实例化时由python解释器自动提供,也就是非特殊情况下,我们不用声明它
  • __new__必须有返回值,返回实例化出来的实例,这点在自己实现__new__时要注意,可以return父类__new__出来的实例,或者直接是object的__new__实例
  • __init__中的参数self,就是这个__new__返回的实例,__init____new__基础上可以完成一些其他初始化的动作,__init__不需要返回值

__init__(self,...)

python中的说明:

  • Called after the instance has been created (by new()), but before it is returned to the caller. The arguments are those passed to the class constructor expression. If a base class has an init() method, the derived class’s init() method, if any, must explicitly call it to ensure proper initialization of the base class part of the instance; for example: super().init([args…]).

  • Because new() and init() work together in constructing objects (new() to create it, and init() to customize it), no non-None value may be returned by init(); doing so will cause a TypeError to be raised at runtime.

  1. __init__在调用__new__方法后自动调用,
  2. __init__(self)中,默认有一参数名为self,如果在创建对象时传递了两个实参,那么__init__(self)中除了self作为第一个参数外,还需要两个形参,例如:__init__(self,x,y)
  3. __init__(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象传递进去
  4. __init____new__区别是:__new__用于创建对象,__init__用于初始化对象,两者并起来,相当于C++/JAVA中的构造函数,创建并初始化
class A(object):
	def __init__(self):
		print("这是__init__方法,初始化对象")

	def __new__(cls):
		print("这是__new__方法,创建对象")
		return object.__new__(cls)

# 创建一个对象a
a = A()

输出结果:

这是__new__方法,创建对象
这是__init__方法,初始化对象

所以当创建一个对象时,将先调用__new__方法来创建对象,然后调用__init__方法作初始化。这两个可以称作“构造”

__del__(self)

__del__(self)在销毁一个对象时,默认调用,称为“析构”

class A(object):
	def __init__(self,name):
		self.name = name
		print("这是__init__方法,初始化对象%s"%self.name)

	def __new__(cls,name):
		print("这是__new__方法,创建对象")
		return object.__new__(cls)

	def __del__(self):
		print("%s对象被删除"%self.name)
		

# 创建一个对象a
a = A("a")
#del a
b = A("b")
c = A("c")
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值