我有代码:
mod_file = 'mymod.py'
mod_path = os.path.join('.', mod_file)
mod_py = 'mymod'
mod = imp.load_source(mod_py, mod_path)
if hasattr(mod, 'MyClass'):
instance = py_mod.MyClass()
我的模组.py:
class MyClass():
def __init__(self):
print 'Hello'
[...]
print 'something'
a = MyClass()
但是“imp.load_source”执行该文件中的所有指令。我只想获得 MyClass 类 - 其他事情会跳过。怎么做?
编辑:
我不能干涉“mymod.py”文件,我不知道该文件将如何命名,这是示例。
我知道文件中将包含“MyClass”类。其他事情是不受欢迎的。
请您参考如下方法:
这在 Python 中是不可能的。您应该设计代码,使其在导入时没有副作用。
此外,请注意模块只执行一次,无论您对它们使用多少次import module,所以这是一个非常糟糕的主意 在模块导入时依赖副作用。
尽管如此,如果您需要让模块在导入时和运行时表现不同,那么您可以使用以下方法实现该目标:
# module.py
# Code that will always run
...
if __name__ == "__main__":
# Code that will only run if you do python module.py
# Usually print statements, argument parsing...
...
在你的情况下,你会这样做:
class MyClass():
def __init__(self):
print 'Hello'
[...]
if __name__ == "__main__":
print 'something'
a = MyClass()
通常的使用方法是:
def main():
# do stuff
if __name__ == "__main__":
main()
