1. 使用__new__方法
class Singleton: def __new__(cls, *args, **kwargs): if not hasattr(cls, ‘_instance‘): cls._instance = super().__new__(cls, *args, **kwargs) return cls._instance class MyClass(Singleton): pass
__new__ 与 __init__ 的联系:
__new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例,是个静态方法。
__init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值。
2. 使用装饰器
def singleton(cls): instances = {} def getinstance(*args, **kwargs): if not instances.get(cls): instances[cls] = cls(*args, **kwargs) return instances[cls] return getinstance @singleton class MyClass: pass
3. 使用import
# myclass.py class MyClass: pass obj = MyClass() # from myclass import obj