我知道有很多类似的问题,但它们并没有帮助我理解我的问题.我还有3个模块:
第一个是model:
from datetime import datetime
from elixir import *
from run_test import create_db
from sqlalchemy.schema import UniqueConstraint
class ValueTest(Test):
value = Field(Integer)
def __init__(self, name, value):
'''
Constructor
'''
self.name = name;
self.value = value
Run Code Online (Sandbox Code Playgroud)
如果我从名为的第二个模块运行测试方法run_test,则没有任何问题
from model import *
def main():
test();
def test():
test = ValueTest("test",2)
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
但是当我尝试这样的东西时,我得到了众所周知的错误 NameError: global name 'ValueTest' is not defined
import run_test
def main():
run_test.test()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
导入模块时,不要导入已导入的名称; 您只导入它自己定义的名称.您仍需要from model import ValueTest在最后一个脚本中执行此操作.
如果from foo import *导入foo导入其自己范围的每个名称,则单个import something也可以导入os或sys例如中的每个符号.这将是一场噩梦.
实际上,这不是真的.从模块导入的符号仅是由该__all__模块中设置的列表定义的符号.(如果不存在,则所有未开头的符号_确实已导入.)
感谢Ethan的纠正.