You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不执行函数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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 23:00:53