Python类在调用任何其他方法时运行方法

2024-06-01 10:52:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个Python应用程序,它将使用一个配置文件,因此我将配置文件的控制权委托给一个专用模块configmanager,并且在这个模块中有一个类ConfigManager。在

每当运行ConfigManager中的方法时,这会以某种方式更改我的配置文件,我需要从磁盘上获取该文件的最新版本。当然,本着DRY的精神,我应该将config文件的打开委托给它自己的函数。在

但是,我觉得显式地调用一个方法来获取并返回编辑它的每个函数中的配置文件并不是很“干净”。在

在Python中,是否有一种推荐的方法来运行一个方法,并使一个值对类中的其他方法可用,无论何时在该类中运行一个方法?在

换句话说:

  • 我创建ConfigManager.edit_config()

  • 无论何时调用ConfigManager.edit_config(),都会运行另一个函数ConfigManager.get_config_file()

  • ConfigManager.get_config_file()为方法ConfigManager.edit_config()提供一个值。

  • 并且ConfigManager.edit_config()现在运行,可以访问ConfigManager.get_config_file()给出的值。

我希望在ConfigManager中有许多版本的edit_config()方法,因此希望干燥我的代码。在

有没有推荐的方法来完成这样的事情?或者我应该创建一个函数来获得配置,然后每次手动调用它?在


Tags: 模块文件方法函数版本config应用程序get
2条回答

既然你从磁盘上得到了一些东西,你就打开了一个文件。{cd1>的函数可以与函数一起使用。在

您应该检查上下文管理器。这样,每次有人通过__enter__方法访问配置文件时,您就可以实现您想要的功能,并且(如果需要的话)实现用__exit__方法停止使用资源的功能。在

自然的方法是:

ConfigManager.get_config_file() makes a value available to the method ConfigManager.edit_config().

是使get_config_file()返回该值。在

只需在edit_config()内调用get_config_file()。在

如果edit_config()多个版本,那么decorator可能是最好的选择:

def config_editor(func):
    def wrapped(self, *args, **kwargs):
        config_file = self.get_config_file()
        func(self, config_file, *args, **kwargs)
    return func

class ConfigManager
       .
       .
       .
    @config_editor
    def edit_config1(self, config_file, arg1):
           ...

    @config_editor
    def edit_config2(self, config_file, arg1, arg2):
           ...

ConfigManager mgr
mgr.edit_config1(arg1)

我其实不喜欢这样:

首先,edit_config1的声明比实际使用需要多了一个参数(因为decorator提供了额外的参数)。在

其次,它实际上并没有节省那么多的锅炉板:

^{pr2}$

总而言之,我不认为装修工节省了足够的重复,值得这样做。在

相关问题 更多 >