gpt4 book ai didi

python - 在导入的代码库之间传递对象的最 Pythonic 方式是什么?

转载 作者:行者123 更新时间:2023-11-28 19:59:14 25 4
gpt4 key购买 nike

我有一个导入两个模块的程序,一个我们称为operations(这只是一系列函数),另一个我们称为tracking(这是一个类(class))。程序 tracking 模块监视一系列消息,有一些错误状态标志,等等。该程序按严重性和相关方对tracking中的信息进行排序,最后将其转储到不同的文件中。

我使用 myTrack = tracking.Tracking() 创建了跟踪类的单个实例。 (是的,这是 global state and therefore bad ,但它非常方便)

不幸的是,我想在 operations 模块中使用我的 tracking 对象,只是为了跟踪错误和警告。看起来我可以将 myTrack 作为参数传递给 operations 模块中的函数,修改每个函数。

但是,是否有“更好”或“更 Pythonic”的方法来做到这一点?我怀疑有一些我没能掌握的 namespace 。

最佳答案

有很多方法可以重构它,但您可以从一个地方开始,即向您的 operations 模块添加一个 track() 函数。默认情况下不执行任何操作。

 def track(message):  # use the right signature though!
pass

在您的 operations 模块中,您可以在任何您可能想要跟踪的地方调用您的 track() 函数。

假设您的 Tracking 对象有一个名为 track() 的方法来执行实际跟踪,那么在您的主模块中,您可以这样做:

myTrack = tracking.Tracking()
operations.track = myTrack.track

这会用您的 Tracking 实例中的方法替换模块的(不执行任何操作)track 函数。

基本上,您提供了一个“ Hook ”,任何人都可以使用它来向您的操作 模块添加跟踪,然后您自己使用该 Hook 。

是的,这更像是“全局状态”,但它是模块全局的,并不是真正的全局。

关于python - 在导入的代码库之间传递对象的最 Pythonic 方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5557035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com