python3 魔术方法汇总


 

一、__new__()

"""
解释:
	此方法是用来生成类的实例的,它是类里面第一个执行的函数
	它至少要有一个参数 通常命名为cls,cls表示需要实例化的类,此参数在实例化时由Python解析器自动提供。
	new()方法是在类准备将自身实例化时调用。
	new()方法始终都是类的静态方法,即使没有被加上静态方法装饰器
	此函数不返回值或者失败  则 init不会执行

作用:
	用在构造方法init()建造实例之前
	在Python 中存在于类里面的构造方法init()负责将类的实例化,而在init()调用之前,new()决定是否要使用该init()方法,因为new()可以调用其他类的构造方法或者直接返回别的对象来作为本类 的实例。
"""
class New():

	def __new__(cls, *args, **kv):
		print(args, kv)
		if not hasattr(cls, '_inst'):
			cls._inst = super(New, cls).__new__(cls)
		return cls._inst
		# return object.__new__(cls) 

a = New('new', jxk=12)

二、__init__()

"""
解释:
	在创建一个对象时 默认自动调用

作用:
	始化函数,用来完成一些默认的设定
"""
class Init():

	def __init__(self, name):
		print(self, name)

a = Init('new')

三、__call__()

"""
解释:
	在Python中,函数其实是一个对象:因为函数可以被调用,所以函数被称为可调用对象
	一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。
作用:
	可以把实例对象用类似函数的形式表示,进一步模糊了函数和对象之间的概念
"""
class Call(object):

	def test(self):
		print(1)

	def __init__(self):
		print("我是构造函数! ")

	def __call__(self):
		print("当把本类实例化并作为函数调用时 自动调用本方法")

c = Call()
c() #调用

 四、__str__()

"""
解释:
	当实例化的类对象 被str() 函数调用时 自动触发此方法

作用:

"""
class Str_(object):
	def __str__(self):
		print('你调用了str 方法!')
		
		return '返回值必须为字符串'


s = Str_()
str( s )

参考资料: https://blog.csdn.net/Ka_Ka314/article/details/80402143