python中

mac2026-05-26  3

__new__是一个类方法,它返回的是一个实例

__init__是一个实例方法,它什么都不返回(如果返回None之外的东西会报错)

事实上,创建一个类分2步。第一步,创建类的对象,就是new;第二步对类进行初始化,就是init

只有在__new__返回一个新创建属于该类的实例时,当前类的 __init__才会被调用。(换言之,如果new方法没有return一个属于该类的实例,则init方法不会被执行;或者__new__方法返回一个已经存在的实例,则__init__方法也不会被调用)

所以单例模型可以这样创建:

class Animal(object): __instance = None def __new__(cls): if cls.__instance == None: cls.__instance = object.__new__(cls) return cls.__new__(cls) else: return cls.__instance a = Animal() print(id(a)) b = Animal() print(id(b)) print(id(a)==id(b))

 

最新回复(0)