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

如何从类中调用参数内的变量?函数对象返回问题咨询

问题分析与解决

核心问题

你当前打印出函数对象的原因很直接:实例化foo时传入的是函数对象bar,而非调用bar()后得到的字典d。因此self._bar存储的是函数本身,打印时自然输出函数的内存地址信息。

两种修正方案

方案1:初始化时传入函数执行结果

如果bar的返回值是固定的,只需要在初始化foo时调用bar,把字典传入:

def bar():
    d = {'a':1, 'b':2}
    return d
class foo:
    def __init__(self, bar_result):
        self._bar_result = bar_result
    def p_dict(self):
        print(self._bar_result)

test_1 = foo(bar())  # 调用bar获取字典后传入
test_1.p_dict()  # 输出: {'a': 1, 'b': 2}

这种方式适合字典内容固定、不需要动态更新的场景,直接传递最终数据,更高效直观。

方案2:在类内部调用函数获取结果

如果bar的返回值需要动态生成(比如依赖外部状态、每次调用结果可能不同),可以将函数对象传入类,在需要的时候执行它:

def bar():
    d = {'a':1, 'b':2}
    return d
class foo:
    def __init__(self, bar_func):
        self._bar_func = bar_func
    def p_dict(self):
        print(self._bar_func())  # 调用函数获取最新字典

test_1 = foo(bar)  # 传入函数对象
test_1.p_dict()  # 输出: {'a': 1, 'b': 2}

这种方式属于依赖注入,让类的灵活性更高,能适应函数返回值变化的场景。

最优实现判断

  • 若字典内容固定不变,优先选方案1,直接传递数据,减少不必要的函数调用。
  • 若字典需要动态生成、或bar函数可能被替换(比如测试时用mock函数),选方案2,通过注入函数让类的扩展性更好。

你担心的“从类外部调用变量”其实不存在问题,这里传递的是函数或其返回值,属于合理的依赖传递,只要明确传递的是函数本身还是结果即可。

内容的提问来源于stack exchange,提问作者Beardo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:35:36