gpt4 book ai didi

Python 跨模块导入和全局变量

转载 作者:太空狗 更新时间:2023-10-29 22:11:49 24 4
gpt4 key购买 nike

我有一个问题似乎很基本,但我似乎无法在任何地方找到任何帮助。

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()

XYZ.doSomething() 失败并提示 NameError: name 'XYZ' is not defined即使是从 file_a 完成的标准导入,如“import sys”,似乎也无法使其在 file_b 中可用。我认为这应该有效。我的理解错了吗?如果是,那么有没有一种方法可以跨文件使用通用导入和全局变量? (如果没有帮助,我曾经是一名 C++ 和 Java 程序员,现在开始使用 Python。)

最佳答案

Is my understanding wrong?

是的,因为行 from file_a import A 仅将类 A 导入到 file_b 的命名空间中。 file_a 的命名空间保持不变。如果不是这样,那么同时使用这两种语法就没有什么意义了:

import modulename
from modulename import something

好像你的想法是对的,那么在第二种形式之后你总是可以使用modulename.someotherthing

If yes, then is there a way to have common imports and global variables across files?

是的,使用星号 * 运算符:

from modulename import *

但这带来了命名空间污染的问题,例如from file_a import * 将在file_b 中导入所有在file_a 中完成的导入.您最终失去对您的导入的控制,这有时会咬住您……相信我!

当出于某种原因需要 from module import * 时,命名空间污染的解决方法是在 module 中定义 variable __all__ ,它将应使用星号运算符导入的内容列入白名单。

喂!

关于Python 跨模块导入和全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8165703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com