如何从类中调用参数内的变量?函数对象返回问题咨询
问题分析与解决
核心问题
你当前打印出函数对象的原因很直接:实例化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
相关产品推荐
相关产品推荐

