python中的@Property和@Setter

张开发
2026/5/6 5:55:57 15 分钟阅读
python中的@Property和@Setter
文章目录原因一为了“伪装”和“省事” (API 更优雅)原因二为了实现“懒加载” (省内存)原因三为了“中间商赚差价” (逻辑控制)看llama-index的settings代码时没太看懂因而有此一问。为什么要用Property和Setter呢?主要是为了解决3个问题。原因一为了“伪装”和“省事” (API 更优雅)原因二为了实现“懒加载” (省内存)原因三为了“中间商赚差价” (逻辑控制)原因一为了“伪装”和“省事” (API 更优雅)不使用Property和Setter代码# 如果没有装饰器你得这样写很啰嗦Settings.set_llm(DashScope(...))modelSettings.get_llm()但是用了 property 和 setter你就可以写得像操作普通变量一样简单# 用了装饰器看起来就像在操作普通变量很清爽Settings.llmDashScope(...)modelSettings.llm原因二为了实现“懒加载” (省内存)propertydefllm(self)-LLM:ifself._llmisNone:# 如果还没初始化self._llmresolve_llm(default)# 才去创建对象returnself._llm原因三为了“中间商赚差价” (逻辑控制)setter 允许你在赋值的时候偷偷插入一些“检查逻辑”。虽然 LlamaIndex 的源码里写得比较简单但在实际开发中setter 经常用来做这种事llm.setterdefllm(self,llm):# 1. 先检查一下你给我的这个东西是合法的模型吗ifnotisinstance(llm,BaseLLM):raiseTypeError(你给我的是个啥必须是 LLM 对象)# 2. 再赋值self._llmllm# 3. 顺便触发个副作用比如告诉日志系统“嘿模型换了”print(模型已更新日志系统已同步)

更多文章