Python 使用导入重置全局变量

Python 使用导入重置全局变量,python,python-3.x,Python,Python 3.x,我有一个代码(Reset.py),除非我导入它,否则它将按照我所希望的方式工作 class Res(object): defaults={} class NoKey: pass def __init__(self): for key, values in defaults.items(): globals()[key]=values def add_defaults(key, values): Res.def

我有一个代码(Reset.py),除非我导入它,否则它将按照我所希望的方式工作

class Res(object):
    defaults={}
    class NoKey: pass
    def __init__(self):
        for key, values in defaults.items():
            globals()[key]=values
    def add_defaults(key, values):
        Res.defaults[key]=value
    def remove_defaults(key=NoKey, remove_all=False):
        if remove_all:
            Res.defaults={}
        else:
            del Res.defaults[key]
不输入:

>>> a=54
>>> Res.add_default('a', 3)
>>> Res()
<__main__.Res object at 0x>
>>> a
3
>>> #great! :D
>>> a=54
>>> Res.add_default('a', 3)
>>> Res()
<Reset.Res object at 0x>
>>> a
54
>a=54
>>>Res.add_默认值('a',3)
>>>Res()
>>>a
3.
>>>太好了D
导入时:

>>> a=54
>>> Res.add_default('a', 3)
>>> Res()
<__main__.Res object at 0x>
>>> a
3
>>> #great! :D
>>> a=54
>>> Res.add_default('a', 3)
>>> Res()
<Reset.Res object at 0x>
>>> a
54
>a=54
>>>Res.add_默认值('a',3)
>>>Res()
>>>a
54
这必须意味着导入时,它会更改重置下的globals(),而不是
\uuuuu main\uuuuu
。我怎样才能解决这个问题


[删除默认值(默认值不是全局变量)下编辑的默认值为Res.defaults.]

您无法修复此问题:它没有被破坏。变异全局变量,特别是在另一个模块的名称空间中隐式变异全局变量,是一个非常糟糕的想法,它会导致混乱、无法维护和不稳定的代码

你的设计看起来很混乱
Res
似乎不是一个真正的类。它的大多数方法根本不是方法(它们没有改变存储在self中的某些状态);唯一定义为方法的是
\uuuu init\uuuu
,它不起作用(
默认值
不应该从给定的代码段定义;类名称空间只在类的原始定义期间查找。是否还有一个名为
默认值
的全局名称?)如果您试图使用
Res
对相关内容进行分组,不要使用类;这就是Python中模块的用途


也许你应该发布一个问题来描述你正在解决的问题。我怀疑此代码表明设计非常不理想。

我只是想知道这是否可行,但我明白你的意思。谢谢。简短的回答是不,方法不知道从哪个模块调用它们,事实上,这个概念很难精确定义。