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__方法