python-实现单例模式

74 阅读1分钟

1.基于new魔术方法实现单例模式

__new__魔术方法

new魔术方法是用来对类进行实例化,new魔术方法比init魔术方法要早

  • new 模式方法是用来进行类的实例化
  • init魔术方法是用来进行类的初始化
class Foo(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age
    
    def __new__(cls,*args,**kwargs):
        pass
        

单例模式实现

class Foo:
    instance = None

    def __init__(self,name,age):
        self.name = name
        self.age = age


    def __new__(cls, *args, **kwargs):
        if cls.instance is None:
            cls.instance = object.__new__(cls)
        return cls.instance

2.魔术方法__getattr__


class Info:
    def __init__(self):
        self.name = "hh"
        self.age = 18


    def __getattr__(self, item):
        return "get attr"


obj = Info()
print(obj.name) #如果类中有该属性,就直接走该属性
print(obj.xxxx) #如果类中没有该属性,就会走__getattr__方法