__init__(): 是初始化方法
__new__(): 才是类的构造方法,创建实例,返回实例
1. 如果覆盖__new__()方法,必须返回对象,否则__init()__方法不会被调用
return supper(A, cls).__new(cls)__
2. __new__(), __init__()参数须一致
3. 子类如果调用父类的__init()__,父类的__init__()不会调用
supper(B, self).__init()__
用处:
1. 覆盖__new__()改变类的行为:
class UserSet(frozenset):
def __new__(cls, *args):
if args and isinstance (args[0], basestring):
args = (args[0].split('a'), ) + args[1:]
return super(UserSet, cls).__new__(cls, *args)
print UserSet("I am testing")
print frozenset("I am testing")
2. 实现工厂模式