如何在不修改原文件时移除Python fitter库fit方法的进度条
移除Fitter类fit方法进度条的解决方案
因为无法修改只读的原模块文件,你可以用下面两种方法实现:
方法一:猴子补丁(Monkey Patching)
直接替换原类的fit方法,删掉进度条相关代码:
- 先写一个不带进度条的
fit方法,逻辑和原方法完全一致,只是去掉tqdm_joblib的上下文:
def patched_fit(self, progress=False, n_jobs=-1, max_workers=-1): import warnings warnings.filterwarnings("ignore", category=RuntimeWarning) N = len(self.distributions) # 去掉进度条,直接执行并行任务 from joblib import Parallel, delayed Parallel(n_jobs=max_workers, backend='threading')( delayed(self._fit_single_distribution)(dist) for dist in self.distributions ) self.df_errors = pd.DataFrame( { "sumsquare_error": self._fitted_errors, "aic": self._aic, "bic": self._bic, "kl_div": self._kldiv, "ks_statistic": self._ks_stat, "ks_pvalue": self._ks_pval, } )
- 导入原
Fitter类,替换它的fit方法:
from fitter import Fitter # 替换原方法 Fitter.fit = patched_fit
之后再创建Fitter实例调用fit,就不会显示进度条了。
方法二:继承重写子类
创建一个继承自原Fitter的子类,重写fit方法去掉进度条:
from fitter import Fitter from joblib import Parallel, delayed import warnings import pandas as pd class NoProgressFitter(Fitter): def fit(self, progress=False, n_jobs=-1, max_workers=-1): warnings.filterwarnings("ignore", category=RuntimeWarning) N = len(self.distributions) # 直接跑并行任务,去掉进度条 Parallel(n_jobs=max_workers, backend='threading')( delayed(self._fit_single_distribution)(dist) for dist in self.distributions ) self.df_errors = pd.DataFrame( { "sumsquare_error": self._fitted_errors, "aic": self._aic, "bic": self._bic, "kl_div": self._kldiv, "ks_statistic": self._ks_stat, "ks_pvalue": self._ks_pval, } )
之后用NoProgressFitter代替原来的Fitter类就行。
注意点
- 猴子补丁会全局修改原类的行为,所有用到
Fitter的地方都会受影响;继承重写只影响你自己创建的子类实例,更稳妥。 - 确保新的
fit方法参数、返回值和原方法完全一致,避免出现兼容性问题。 - 如果原模块后续更新了
fit方法的逻辑,你需要同步更新补丁或子类的方法。
内容的提问来源于stack exchange,提问作者Jesus M.
相关产品推荐
相关产品推荐

