Python跨模块和全局变量导入

ksr*_*ini 6 python import python-module

我有一个似乎相当基本的问题,但我似乎无法在任何地方找到任何帮助.

file_a.py >>

from xyz import XYZ
class A:
    .
    .
    .

file_b.py >>

import file_a
from file_a import A
class B(A):
    def __init__(self):
        A.__init__(self)

    def someMethod(self):
        XYZ.doSomething()
Run Code Online (Sandbox Code Playgroud)

XYZ.doSomething()无法说出NameError:名称'XYZ'未定义即使从file_a完成的标准导入(如'import sys')似乎也无法使其在file_b中可用.我认为应该工作.我的理解错了吗?如果是,那么有没有办法在文件中包含常见的导入和全局变量?(如果它有帮助,我一直是C++和java程序员,现在我开始使用python.)

mac*_*mac 5

我的理解错了吗?

是的,因为该行from file_a import A只将类A导入到命名空间中file_b.命名空间file_a是独立的.如果它不是这样的话,那么两种语法都没有意义:

import modulename
from modulename import something
Run Code Online (Sandbox Code Playgroud)

好像你的想法是正确的,然后在第二个表格之后你总是可以使用modulename.someotherthing.

如果是,那么有没有办法在文件中包含常见的导入和全局变量?

是的,有明星*运营商:

from modulename import *
Run Code Online (Sandbox Code Playgroud)

但这带来了命名空间污染的问题,例如from file_a import *也会导入file_b所有进口的file_a.你最终失去对你的进口的控制权,这会在某个时候咬你...相信我!

当由于某种原因from module import *需要时,命名空间污染的变通方法是在变量中定义,module变量__all__将使用星形运算符导入的内容列入白名单.

HTH!