因为用的是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
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