【Python类管理】装饰器@的实际用法和查询
在项目中如果需要用到全局类管理,则需要用到一些更加快捷管理类的方式
首先我们看看语法
首先创建类
@dataclass
class cache:userdate: int = 1
这里的@dataclass指的是装饰器,用来快速构建装饰器
那什么是装饰器呢?
装饰器本质上是一个函数,它接收另一个函数或类作为输入,然后返回一个新的、经过修改的函数或类。@ 符号是使用装饰器的语法糖。
@dataclass 有什么用?
在 Python 中,定义一个类通常需要写很多模板化的代码,比如 init (构造函数), repr (用于打印对象信息), eq (用于比较两个对象是否相等) 等。@dataclass 装饰器会自动为你生成这些方法。
比如对于一般构建类,我们通常用以下这种方式:
class GlobalState:def __init__(self):self.user_data = UserData()self.statistics = Statistics()self.logging = Logging()self.algorithm = Algorithm()self.inference = Inference()self.results = Results()def __repr__(self):# 需要自己写一个很长的字符串来表示对象return f"GlobalState(user_data={self.user_data}, ...)"def __eq__(self, other):# 需要自己比较每一个字段return (self.user_data == other.user_data andself.statistics == other.statistics and ...)
那么现在只需要一句话就可以概括了
那么在目前这种现代化的操作当中有几种格式操作规范
userdata:Optional[int] = 1
这里的optional指的是类型提示 (Type Hint)。它本身在程序运行时不起强制作用,但它对开发者和开发工具有着至关重要的指示意义。
这里的optional代表的是:
它本身不是一个具体的类型,而是一个修饰符。Optional[X] 是 Union[X, None] 的简写形式。
Union[X, None] 的意思是“可以是 X 类型,也可以是 None 值”。
userdata:Optional[int] = filed(defaut_factory = None)
在这里filed指的是为这个字段设置默认值
后面的default_factiory
指的是每次调用的时候每个实例都有独立的空列表作为默认值。
与 default 的区别:default 是静态值,而 default_factory 是动态调用的函数,用于生成默认值。
那么整段话翻译过来就是userdata的值应该是int或者其他,当调用的时候会给一个默认值none作为基础
userdata:List[int] = filed(defaut_dactory = None)
这里的list同样是指示器,代表的是:这个值应该是list,当提供了int值,不然生成一个空列表
调用
那么在调用的时候
global = Global()
global.userdata = 2