Python3中的__new__()方法

__new__方法是用来创建对象的,而__init__方法是用来初始化类对象的,因此__new__方法的会先于__init__方法执行。
__new__方法可以用来实现python中的单例设计模式,但是在Python3中,__new__方法的写法有所改变:

class User(object):
    __instance = None

    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
        	# python2中的旧写法为:
            # cls.__instance = super(User,cls).__new__(cls,*args,**kwargs)
            # 正确写法为:
            cls.__instance = super(User, cls).__new__(cls)
        return cls.__instance

    def __init__(self, name):
        self.name = name

如果仍然用python2的旧写法,程序会报错TypeError: object.__new__() takes no arguments

你可能感兴趣的:(Python)