Python如何在不修改类函数返回值的前提下跨类获取其内部变量
实现方案
该需求可以实现,以下提供两种可直接落地的操作方式:
方案1:完全匹配你期望的oneClass.func.angle调用写法
利用Python中函数本身也是对象,可自定义绑定属性的特性实现,不需要修改func的返回值。
第一步:修改oneClass的func方法逻辑
class oneClass: # 你的原方法没有self参数,补充静态方法装饰器保证调用逻辑正常 @staticmethod def func(): # ... 原有函数逻辑 angle = int(result) # 新增:给func自身绑定angle属性 oneClass.func.angle = angle # ... 原有函数逻辑 return img # 可选:提前初始化angle属性,避免未调用func直接访问时报错 oneClass.func.angle = 0
第二步:另一个类中直接按你期望的方式访问即可
class anotherClass(): @staticmethod def anotherFunc(): # 注意:必须先调用一次func,angle属性才会更新为最新计算值 img = oneClass.func() target_angle = oneClass.func.angle # 后续可正常使用target_angle
方案2:使用类属性存储,更稳定易维护
如果不需要严格匹配oneClass.func.angle的写法,更推荐用类属性存储angle,符合Python常规编码规范,容错率更高。
第一步:修改oneClass定义
class oneClass: # 提前定义类属性存储angle angle = 0 @staticmethod def func(): # ... 原有函数逻辑 angle = int(result) # 给类属性赋值 oneClass.angle = angle # ... 原有函数逻辑 return img
第二步:访问方式
class anotherClass(): @staticmethod def anotherFunc(): img = oneClass.func() target_angle = oneClass.angle
注意事项
- 两种方案的angle都会跟随
func的调用被覆盖为最新计算值,多场景调用时要注意调用时序 - 你之前全局变量不生效大概率是因为跨模块调用时导入逻辑错误、或者函数内修改全局变量未加
global声明,上述方案比全局变量更安全,不会污染全局命名空间
内容的提问来源于stack exchange,提问作者user16731999
相关产品推荐
相关产品推荐

