更新变量并更改导入模块

时间:2019-03-16 16:43:59

标签: python python-3.x

假设我在common.py中有两个python类:

common.py

class A:
    def func1:
             ...
    def func2:

class B:
    def func1:
          ....
    def func2

if volatile == 1:
    commonObj = A()
else:
    commonObj = B()

现在有一组模块,可以说:

user1.py, user2.py,...

使用commonObj,如下所示:

from common import commonObj

commonObj.func1()
commonObj.func2()

所有这些模块构成一个服务器,该服务器作为一个进程连续运行。

我想问一下我将如何实现: 假设有一种方法可以随时更改变量volatile的值,用户模块即user1.py,...等现在都应该访问commonObj中的更新值,而不必重新启动服务器。

2 个答案:

答案 0 :(得分:0)

我不建议在user*.py模块中更改代码,

class A:
    def func1:
        ...

class B:
    def func1:
        ...

class Common:
    def func1:
        if volatile == 1:
            return A.func1(self)
        else:
            return B.func1(self)

    ...

commonObj = Common()

更改volatile的值将影响将执行func1的内容而无需重新启动服务器。

答案 1 :(得分:0)

我认为您解决问题的方法是错误的。您需要一些动态行为并尝试以静态方式实现。让我们假设您可以通过某种方式更改HttpMessageHandlerSpec变量的值。您的MessageSource文件永远不会从更改volatile的值中获得任何好处,因为它只会从该obj调用一次方法。

另一方面,如果您有一些可以重复运行的代码(如函数),并且像这样使用user.py

commonObj

您可以像这样动态获得commonObj

common.py

def some_function():
    commonObj.func1()
    commonObj.func1()

现在使用它来使您成为user.py中的对象

commonObj