new方法用于创建,init方法用于初始化。
单例
- 单例对象只能有一个实例对象,相当于独生子女。
class Dog(object):
__instence = None #用于保存单例对象的引用,同时兼有初次创建判别功能
def __new__(cls):
if cls.__instence == None:
cls.__instence = object.__new__(cls) #调用父类方法来创建新对象
return cls.__instence
else:
return cls.__instence #返回已经创建的单例对象引用
a = Dog()
print(id(a))
b = Dog()
print(id(b))
>>>
2596672722480
2596672722480
id相同,b引用了a。
只初始化一次
调用类时自动执行init方法,但对于单例对象不能多次初始化。
class Dog(object):
__instence = None
__init_flag = False
def __new__(cls,name):
if cls.__instence == None:
cls.__instence = object.__new__(cls)
return cls.__instence
else:
return cls.__instence
def __init__(self,name):
if self.__init_flag == False:
self.name = name
self.__init_flag = True
a = Dog('哮天犬')
print(a.name)
b = Dog('旺财')
print(b.name)
>>>
哮天犬
哮天犬