Skip to main content
 首页 » 编程设计

python之如何从模块中只加载一个类

2025年05月04日16birdshome

我有代码:

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