Python跨类调用已有实例方法 无需重复创建实例的实现方法
实现方案
完全可以实现,不需要在custom2中重复创建custom1实例,核心逻辑是将mainClass.func()中已经初始化完成的obj1通过参数传递给custom2实例使用,全程复用同一个实例。
方式1:单次调用传参
如果仅func2需要用到custom1的实例,直接在调用func2时将obj1作为参数传入即可,修改后代码如下:
class custom1: def func1(self): # 原有业务逻辑 print("执行custom1的func1方法") class custom2: def func2(self, c1_instance): # 直接调用传入实例的func1方法 c1_instance.func1() class mainClass: def func(self): obj1 = custom1() obj2 = custom2() # 传入已创建的obj1,不重复生成实例 obj2.func2(obj1)
运行时obj2.func2()会直接复用obj1调用方法,没有额外的实例创建开销。
方式2:实例初始化时绑定实例
如果custom2中有多个方法都需要复用同一个custom1实例,可以在初始化custom2的时候就把obj1绑定为custom2的实例属性,避免每次调用方法重复传参:
class custom1: def func1(self): # 原有业务逻辑 print("执行custom1的func1方法") class custom2: def __init__(self, c1_instance): # 将传入的custom1实例绑定为自身属性 self.c1 = c1_instance def func2(self): self.c1.func1() def other_func(self): # 类内其他方法也可以直接复用同一个custom1实例 self.c1.func1() class mainClass: def func(self): obj1 = custom1() # 初始化obj2时就传入已创建的obj1 obj2 = custom2(obj1) obj2.func2() obj2.other_func()
注意:不推荐使用全局变量传递
obj1,这种写法会大幅提升代码耦合度,后续调试、维护时很难追踪实例的状态变更链路,显式传参是可读性、可维护性最优的方案。
内容的提问来源于stack exchange,提问作者user19536789
相关产品推荐
相关产品推荐

