如何在Python自定义类中导入外部库

时间:2017-01-26 13:58:02

标签: python

我是Python的新手,我正在努力在自定义类中导入外部模块/包。 我没有找到答案(可能是因为我使用的术语不是好的)所以我在这里发帖。它基本上是一个处理Python全局理解的新手问题

我有以下课程:

class MyCustomClass:
  import openpyxl as xl
  from fuzzywuzzy import fuzz
  from fuzzywuzzy import process
  import time

  def __init__(self, file_path):
    self.file = xl.load_workbook(file_path)

   def some_method(self):
     start = time.time()
     process.extractOne(#calling args)

当我使用这个类结构创建一个实例时,我得到了`NameError:name' xl'没有定义``

使用self.xl和self.time时有效。 以下是我的问题:

1)在我的课程中导入模块或包的好方法是什么?

2)我可以避免使它们成为实例变量吗?

感谢您的帮助,

2 个答案:

答案 0 :(得分:2)

在类定义中导入使这些名称可用作类成员:

>>> class Example:
        import time

>>> Example.time
<module 'time' (built-in)>

因此,为了从内部访问这些导入,您必须使用MyCustomClass.xl.load_workbook将它们称为类成员。

总的来说,这是不鼓励的。这些导入不属于类本身,它们是类的依赖项,但没有理由将这些依赖项公开为类成员。相反,您应该只导入类定义的之外的名称:

import openpyxl as xl
from fuzzywuzzy import fuzz
from fuzzywuzzy import process
import time

class MyCustomClass:
    def __init__(self, file_path):
        self.file = xl.load_workbook(file_path)

    def some_method(self):
        start = time.time()
        process.extractOne(some_args)

答案 1 :(得分:0)

为什么不在类定义之外将它们导入到fie的顶部?或者,如果您真的希望这些导入非常本地化,请将它们导入到实际使用它们的__init__方法或方法中。

您执行此操作的方式导入的模块引用既不在全局范围内也不在方法本地范围内,这就是它无效的原因