我看了一个similar问题,但它并没有真正回答我的问题。假设我有以下代码(过于简化以仅突出显示我的问题)。
class A:
def __init__(self,x):
self.val = x
a = A(4)
print a.val
此代码驻留在文件someones_class.py
中。我现在想在我的程序中导入并使用类 A
,不修改 someones_class.py
。如果我执行 from somemes_class import A
,python 仍会执行文件中的脚本行。
问题:有没有办法只导入类A
而不执行最后两行?
我知道 if __name__ == '__main__'
的事情,但我没有修改 someones_class.py
文件的选项,因为它仅在我的程序启动后获得正在执行。
最佳答案
此答案只是为了证明它可以完成,但显然需要更好的解决方案来确保您包含要包含的类。
>>> code = ast.parse(open("someones_class.py").read())
>>> code.body.pop(1)
<_ast.Assign object at 0x108c82450>
>>> code.body.pop(1)
<_ast.Print object at 0x108c82590>
>>> eval(compile(code, '', 'exec'))
>>> test = A(4)
>>> test
<__main__.A instance at 0x108c7df80>
您可以检查 code
主体中想要包含的元素并删除其余元素。
注意:这是一个巨大的黑客攻击。
关于Python:导入模块而不执行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16177238/