Python中的__new__和__init__初始化的区别

本文探讨了Python类中的__new__和__init__方法的区别。__new__是真正的构造函数,负责创建实例,而__init__则用于初始化对象属性。通过示例展示了__new__如何被调用并返回实例,以及如何重写__new__以返回其他类的实例。了解这两个方法对于深入理解Python对象的创建过程至关重要。
摘要由CSDN通过智能技术生成

__init__ 方法为初始化方法, __new__方法才是真正的构造函数。

1、__new__方法默认返回实例对象供__init__方法、实例方法使用。

class Human2(object):		
	def __init__(self,age,sex):
		self.age = age
		self.sex = sex
		print("self", self)
		

	def speak(self):
		print("I am:",self.age,self.sex)

示例:

h = Human2(1,1)
	print(dir(h))

运行结果:

self <__main__.Human2 object at 0x00000243980A99E8>
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age', 'sex', 'speak']

如果,我们重写 new 函数:

class Human2(object):
	# def __new__(cls, *args, **kwds):
		# inst = object.__new__(cls)
		# print("new, inst", inst)
		# return inst
		
	def __init__(self,age,sex):
		self.age = age
		self.sex = sex
		print("self", self)
		

	def speak(self):
		print("I am:",self.age,self.sex)

运行结果:

new, inst <__main__.Human2 object at 0x000001D1132C9A58>
self <__main__.Human2 object at 0x000001D1132C9A58>

也就是, new 创建示例,并返回给初始化的第一个参数,这里是 self.

此外, new 还可以返回其他类的实例:

class Human(object):
	def __str__(self):
		return "Human class"

class Human2(object):
	def __new__(cls):
		h = Human()
		print("call human:",h)
		return Human()
		
	def __init__(self):
		print("self", self)

参考:

  1. python 类中__new__ 和 __init__方法区别;
  2. Python中的__new__和__init__的区别;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rosefunR

你的赞赏是我创作的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值