python __new__ 和 __init__

来源:互联网 发布:知乎机构账号 编辑:程序博客网 时间:2024/04/29 05:00

因为用的是python3 所以是新式类


__new__(cls)是用来在初始化类的实例前创建实例的方法. 可以用他来控制类的创建过程

如果:

class A(object):    def __new__(cls):        print('new')    def __init__(self):                print('init')A()


输出:

new

init不会执行, 因为init是在new返回创建的实例时才调用的, new方法返回的实例会作为init的self参数.

如果要自定义创建过程应该


class A(object):    def __new__(cls):        #do something        return super().__new__(cls)    def __init__(self):                print('init')A()


输出:


init


有了new我们就可以自定义类的创建过程.

class Female:    def __str__(self):        return "I'm Female"class Male:    def __new__(cls):        return super().__new__(Female)    def __str__(self):        return "I'm Male"print(Male())

输出:

I'm Female






0 0
原创粉丝点击