在Python类中导入模块
我现在正在写一个类,这个类需要用到 os
、stat
以及其他一些模块。
请问在我的类中,导入这些模块的最佳方式是什么呢?
我在考虑其他人使用这个类时,希望在创建这个类的时候,所需的模块能已经被导入。
现在我是在我的方法里导入这些模块,但我觉得可能还有更好的方法。
4 个回答
PEP 8 关于导入的规定:
导入的内容总是放在文件的最上面,紧接着模块的注释和文档字符串,然后是模块的全局变量和常量。
这样做的好处是,可以很方便地看到当前文件使用了哪些模块,而且当一个模块在多个地方被使用时,就不需要在不同的位置重复导入。其他情况(比如在函数或方法内部导入)应该是非常少见的,并且需要有充分的理由。
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,不知道该如何解决。比如,有人可能在使用某个特定的功能时,发现它并没有按照预期工作。这种情况下,通常需要仔细检查代码,看看是不是哪里出错了,或者是否有遗漏的步骤。
有时候,解决问题的方法就是查阅相关的文档,或者在网上搜索一下,看看其他人是否遇到过类似的问题。社区论坛,比如StackOverflow,就是一个很好的地方,可以找到很多有用的信息和解决方案。
总之,遇到问题时,不要着急,慢慢分析,寻找解决办法,通常就能找到出路。
import sys
from importlib import import_module
class Foo():
def __init__(self):
# Depends on the configuration of the application.
self.condition = True # "True" Or "False"
if self.condition:
self.importedModule = import_module('moduleName')
# ---
if 'moduleName' in sys.modules:
self.importedModule.callFunction(params)
#or
if self.condition:
self.importedModule.callFunction(params)
# ---
如果你的模块总是需要引入另一个模块,最好把这个引入放在最上面,就像PEP 8和其他回答所说的那样。此外,正如@delnan在评论中提到的,像sys
、os
这些模块反正都会用到,所以全局引入它们也没什么坏处。
不过,如果你真的只在特定的运行条件下需要某个模块,使用条件引入也是没问题的。
如果你只想在类被定义时引入它,比如这个类在一个条件块里,或者在另一个类或方法中,你可以这样做:
condition = True
if condition:
class C(object):
os = __import__('os')
def __init__(self):
print self.os.listdir
C.os
c = C()
如果你只想在类被实例化时引入它,可以在__new__
或__init__
方法中进行引入。