python 变量全局化

我在Base模块中建立了一个类:

class Base(object):
    def do_something(self):
        pass

在main文件中,我这么做:

import Base
class Sub(Base.Base):
    pass

在Base类中,do_something()是需要访问main的命名空间的。也就是说Base类不会被实例化,但是会从别的地方(main中)继承Base.Base,然而继承而来的do_something()命名空间不是main的。
我想保持main文件的整洁,该如何修改Base文件来使继承下来的方法do_somgthing能访问main的命名空间?

阅读 5.4k
2 个回答

没有简单的办法让定义在模块中的代码直接使用调用这个模块的代码模块的全局变量。

你可以或者:

将要用到的全局变量作为 do_something 的参数传入。

或者:

定义一个可 import 的模块,比如 _g.py。整个程序所有需要以全局的方式存取的数据都放在 _g 中。

我觉得思路不对,应该从OOP的角度思考。
作为一个单一职责的Base类,他怎么会去关心调用他的类的东西呢?

解决方案也很简单,Base类既然在解决一些问题(do_something),而要解决这些问题,需要一些支持(用你的话说是从main中获取信息),那么main在调用do_something的时候就应该将需要的参数传给他。

具体实现方法:
方法一:在main的构造函数中将参数传递给base;
方法二: 在main中需要调用do_something的地方传递需要的参数给他。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进