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