1. 对参数方便管理和赋值
class Hparams:
def __init__(self):
self.param1= 'param1'
self.param2= 'param2'
def __setattr__(self, key, value):
self.__dict__[key] = value
sq = Hparams()
sq.param1= '000'
2. 装饰器的简单理解
# 装饰器就是把其他函数作为参数的函数 def log(func): # # 在函数里面,装饰器在运行中定义函数: 包装. # 这个函数将被包装在原始函数的外面,所以可以在原始函数之前和之后执行其他代码. def wrapper(*args, **kw): print('call %s():' % func.__name__) func(*args, **kw) print('after call %s()' % func.__name__) return wrapper # 装饰器的返回值刚才包装过的函数 @log def demo(): print("xxx") demo()
3. 单例模式:程序运行期间只存在一个实例对象。
4. 类装饰器-单例模式:
装饰器里面的外层变量定义一个字典,里面存放类的实例.当第一次创建的时候,将这个实例保存到字典中.
以后每次创建对象,都去这个字典中判断一下,如果已经被实例化,就直接取这个实例对象.如果不存在就保存到字典中.
class Singleton: """ 单例装饰器。 """ __cls = dict() def __init__(self, cls): self.__key = cls # 判斷類是否實例過的中間變量 def __call__(self, *args, **kwargs): # 在實例化類的時候 if self.__key not in self.cls: # 未被實例化 self[self.__key] = self.__key(*args, **kwargs) # 將類的實例賦給__key return self[self.__key] def __setitem__(self, key, value): # 實例寫入 self.cls[key] = value def __getitem__(self, item): # 實例獲取 return self.cls[item] @property # 函數當做屬性訪問 可讀 def cls(self): return self.__cls @cls.setter # 可寫 def cls(self, cls): self.__cls = cls