单例
class Singleton:
"""单例模式且只初始化一次"""
instance = None
init = False
def __new__(cls, *args, **kwargs):
"""单例"""
if cls.instance is None:
# 调用基类object进行实例,并用instance记录实例地址
cls.instance = object.__new__(cls) # 也可用 super() 替换 object, 是一样的
# 记录地址以后,后续的实例化对象操作都返回这个最开始的实例地址
return cls.instance
def __init__(self):
"""初始化一次"""
if self.init:
return
print('初始化')
self.init = True
def main():
dog = Singleton()
cat = Singleton()
pig = Singleton()
print(id(dog) == id(cat) == id(pig))
if __name__ == '__main__':
main()
输出:
初始化
True