代码设置如下:
现在,我想要实现的目标是,当调用 ui_theme.on_change 事件时,它应该以某种方式调用 cards_page.on_variant_change 事件。
约束:我绝对不想创建一个函数来生成variant_selector。这使得代码组织有点混乱。我也无法在初始化后设置事件处理程序。
我目前的解决方案如下:
on_change_variant_callback = None
def on_change_variant_click(dbref, msg, to_ms):
print ("button clicked:", msg.value)
if on_change_variant_callback:
on_change_variant_callback(dbref, msg, to_ms)
pass
import ui_theme
def on_variant_select():
pass
ui_theme.on_change_variant_callback = on_variant_select
在我看来应该有更好的方法——可能依赖注入可以提供帮助,尽管我不太理解这个概念。
通过使用依赖注入,您可以使代码更加模块化和灵活。使用此方法,您可以从对象外部提供对象所需的组件。因此,您可以放松模块之间的紧密关系,并使您的代码更易于管理,使其更容易接受未来的更改。
在当前情况下,您已在 ui_theme.py 文件中定义了 on_change_variant_callback 函数,并在 cards_page.py 文件中为该回调函数分配了一个值。这种情况在两个文件之间建立了非常紧密的联系。
我们可以使用依赖注入来放松这种紧密的联系。也就是说,我们可以通过某种方式从外部将 on_change_variant_callback 函数传递给 ui_theme.py 模块。因此,我们减少了 ui_theme.py 和 cards_page.py 文件之间的依赖关系,使我们的代码具有更加模块化和灵活的结构。
通过这种方法,你可以更轻松地适应你的代码未来的发展,轻松适应可能的变化
ui_theme.py
class VariantSelector:
def __init__(self, on_change_callback=None):
self.on_change_callback = on_change_callback
def on_change_variant_click(self, dbref, msg, to_ms):
print("button clicked:", msg.value)
if self.on_change_callback:
self.on_change_callback(dbref, msg, to_ms)
cards_page.py
from ui_theme import VariantSelector
def on_variant_select(dbref, msg, to_ms):
# Handle the variant change event
pass
variant_selector = VariantSelector(on_change_callback=on_variant_select)