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

如何初始化类并缓存属性后单独调用类方法避免重复计算

类初始化与方法延迟调用的可行性分析

原始类代码

class AnalyseMyHandOnFlop():

    def __init__(self, stack_tracker, SPR_tracker, guy_to_right_bet_size):
        self.top_set = self.top_set_checker()
        self.flopped_top_set_flop1 = self.top_set[0]
        self.flopped_top_set_flop2 = self.top_set[1]

        self.nut_flush = self.some_flush_check()
        self.flopped_flush_flop1 = self.nut_flush[0]
        self.flopped_flush_flop2 = self.nut_flush[1]
        ...

    def some_function_I_call_after(self): 
        if self.flopped_flush_flop2:
            <do_something> 
        elif self.flopped_top_set_flop1:
            <do_something> 

需求描述

由于脚本执行时机至关重要,希望先执行AnalyseMyHandOnFlop()初始化类,填充所有由函数调用生成的属性;完成其他处理后,再单独调用some_function_I_call_after方法,避免重新运行整个类及其内部函数——因为类初始化及其中的函数调用耗时较长。

目前是初始化类后立即调用self.some_function_I_call_after(),但想先初始化类并填充所有属性,待其他处理完成后仅调用该方法(不重新初始化类)。需注意该方法会引用self.flopped_flush_flop2、self.flopped_flush_flop1等属性值,请问这种实现是否可行?

解答

完全可行,这是Python面向对象编程里的常规操作:

  • 初始化AnalyseMyHandOnFlop实例时,__init__方法会一次性跑完所有属性计算逻辑,把flopped_top_set_flop1、flopped_flush_flop2这些属性值存在实例里,只要实例没被销毁,这些属性就会一直保留。
  • 你可以把初始化好的实例存成变量(比如hand_analyser = AnalyseMyHandOnFlop(...)),先去处理其他任务,等需要的时候直接调用hand_analyser.some_function_I_call_after()就行,不会重新触发__init__里那些耗时的计算。
  • 只要你不在其他逻辑里修改这些属性的值,some_function_I_call_after调用时用到的就是初始化时计算好的结果,完全满足你的需求。

调用示例

# 1. 初始化类,完成所有属性计算(仅执行一次)
hand_analyser = AnalyseMyHandOnFlop(stack_tracker_obj, spr_tracker_obj, bet_size)

# 2. 执行其他优先处理的逻辑
do_other_processing()
another_important_task()

# 3. 延迟调用目标方法
hand_analyser.some_function_I_call_after()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 21:19:53