实现单例的大体思路都是内置一个实例对象作为类的属性,在创建对象时再给实例赋值,或者传递该实例的引用,
Python是通过重写类的__new__方法实现单例,
JAVA实现单例时,会定义一个对外提供获取实例的方法
两者不太一样,需要注意
另外,
python中除了重写__new__方法提供唯一一个实例之外,
如果程序中重写了__init__方法,还要注意修改__init__方法以避免每次重复执行
笔者Python版本为3.7.2,实现单例的代码如下:
class MusicPlay:
# 定义一个实例作为类的属性
instance = None
# 定义一个标记,记录是否执行过初始化动作
init_flag = False
def __new__(cls, *args, **kwargs):
""" 创建对象时,new方法会被自动调用"""
# super 与 super()
# print(super, type(super),super.__class__.__name__)
# print(super(), type(super()),super().__class__.__name__)
# print(