Python如何在子类方法中打印父类静态方法内部定义的变量
Python 子类访问父类静态方法内部局部变量的实现方法
核心原因:父类A的静态方法aFunction中定义的userInputVariable属于方法局部变量,方法执行完毕后会被自动回收,默认无法在外部直接访问,我们只需要在不改动原有打印逻辑的前提下,将该变量透出即可实现需求。
方案1:新增返回值(兼容性最优,推荐)
该方案仅给原静态方法新增返回值,完全不影响原有aFunction的调用逻辑和打印输出:
class A: @staticmethod def aFunction(): userInputVariable = input("Enter string: ") print("This print function not should use in bFunction but print in aFunction while i call aFunction") # 新增返回值,原有逻辑完全不变 return userInputVariable class B(A): # 实例方法补充self参数 def bFunction(self): print(self.stored_input) b = B() # 调用aFunction时将返回值存入实例属性 b.stored_input = b.aFunction() # 调用bFunction打印变量 b.bFunction()
方案2:类属性存储(无需处理返回值)
如果不想修改原有方法的返回值,可以将输入值存入类属性全局共享:
class A: # 提前定义类属性存储输入值 _user_input = None @staticmethod def aFunction(): userInputVariable = input("Enter string: ") # 将局部变量赋值给类属性 A._user_input = userInputVariable print("This print function not should use in bFunction but print in aFunction while i call aFunction") class B(A): def bFunction(self): # 直接访问父类的类属性即可 print(A._user_input) b = B() b.aFunction() b.bFunction()
注意事项
- 方案1没有全局状态,多实例调用不会互相干扰,是优先选择的实现方式
- 方案2依赖类属性存储,多实例多次调用
aFunction会覆盖之前存储的值,适合单场景单次调用的场景 - 不推荐使用获取执行上下文、修改局部变量表等黑魔法实现,兼容性差且后续维护成本极高
内容的提问来源于stack exchange,提问作者Ravi Coder
相关产品推荐
相关产品推荐

