如何在不执行函数b的情况下访问类A的实例变量self.num
解决方法
直接修改原类(最简单的方式)
如果允许修改类A的代码,直接把print("Don't Run")这行注释或删除,之后正常调用obj.b()即可:class A: def __init__(self): self.num= [0] def b(self): # print("Don't Run") # 注释掉不需要的打印语句 self.num= [2] obj = A() obj.b() print(obj.num) # 输出 [2]手动赋值(适合逻辑简单的场景)
既然明确知道b()方法最终是把self.num设为[2],直接给实例的num属性赋值就行,完全不用调用b():obj = A() obj.num = [2] print(obj.num) # 输出 [2]继承重写方法(不修改原类的情况下)
定义一个继承自A的子类,重写b()方法去掉打印逻辑,用子类创建实例:class A: def __init__(self): self.num= [0] def b(self): print("Don't Run") self.num= [2] class ModifiedA(A): def b(self): # 只保留赋值逻辑,去掉打印 self.num = [2] obj = ModifiedA() obj.b() print(obj.num) # 输出 [2]临时替换print函数(适合需保留原方法其他逻辑的场景)
不想改类也不想重写方法的话,可以临时把print替换成空函数,调用完b()再恢复:class A: def __init__(self): self.num= [0] def b(self): print("Don't Run") self.num= [2] obj = A() # 保存原print函数 original_print = print # 替换成空函数,让打印失效 print = lambda *args, **kwargs: None obj.b() # 恢复原print功能 print = original_print print(obj.num) # 输出 [2]
内容的提问来源于stack exchange,提问作者user143114114
相关产品推荐
相关产品推荐

