如何从其他文件的main函数内部导入类?
解决函数内部类无法导入的问题
问题原因
你遇到的no attribute 'Aclass'错误,是因为Aclass定义在main()函数的局部作用域里。Python模块导入时,只会执行模块顶层的代码,函数内部的代码不会自动运行,而且局部作用域里的对象无法直接被模块外部访问,所以导入A后找不到Aclass。
解决方案
方案1:将类移到函数外部(推荐)
把Aclass从main()里拿出来,变成模块级别的类,这样导入模块后就能直接访问:
修改后的A.py:
class Aclass(): def foo(self): return "some value" # 替换成实际要返回的内容,原代码里的x未定义会报错 def main(): # 函数内部可以正常使用这个类 obj = Aclass() print(obj.foo())
当前脚本中导入使用:
import A my_obj = A.Aclass() print(my_obj.foo())
方案2:保留类在函数内,手动暴露类
如果必须把Aclass留在main()里,可以通过两种方式把它暴露到模块级别:
方式2.1:让main()返回类,导入后调用函数获取
修改A.py:
def main(): class Aclass(): def foo(self): return "some value" return Aclass
当前脚本中使用:
import A Aclass = A.main() my_obj = Aclass()
方式2.2:在模块内调用main(),把类赋值给模块变量
修改A.py:
def main(): class Aclass(): def foo(self): return "some value" return Aclass # 执行函数,把类暴露到模块级别 Aclass = main()
当前脚本中直接导入使用:
import A my_obj = A.Aclass()
注意事项
原代码中foo()方法返回的x未定义,不管用哪种方案,都需要把x替换成具体的值,或者在类里定义这个变量,否则调用foo()时会触发NameError。
内容的提问来源于stack exchange,提问作者YoungPhilosopher Davey
相关产品推荐
相关产品推荐

