导入类中的模块,但是在类方法中使用模块时出现NameError

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了导入类中的模块,但是在类方法中使用模块时出现NameError相关的知识,希望对你有一定的参考价值。

在我的python脚本中,我试图在类中导入模块,并在类方法中使用导入的模块。

class test:
    import urllib.parse

    def __init__(self, url):
        urlComponents = urllib.parse.urlsplit(url)

但是,当我尝试使用测试类时,例如

test("http://test.com")

我收到错误:

NameError:名称'urllib'未定义

为什么类主体中的导入语句不生效?

我在Windows 10中使用python 3.8.1。

答案

您失踪是self.urllib.parse。

如果您确实要在类中导入模块,则必须从该类中访问它:

class Test:
    import urllib.parse as ul


    def __init__(self, url):
        urlComponents = self.ul.urlsplit(url)

t1 = Test("www.test.com")  
print(t1)

结果:<< [main。在0x5029处测试>

另一答案
import语句执行名称绑定,但是类范围内的名称在方法内部不直接可见。这与任何其他类名相同。

>>> class Test: ... a = 2 ... def get_a(self): ... return a ... >>> Test().get_a() NameError: name 'a' is not defined

您可以通过类或实例来引用任何类属性。这也适用于导入的名称。

class test: import urllib.parse def __init__(self, url): urlComponents = self.urllib.parse.urlsplit(url)

另一答案
https://www.python.org/dev/peps/pep-0008/#imports引用

导入总是放在文件的顶部,紧随任何模块之后注释和文档字符串,以及模块全局变量和常量之前。

我认为将导入放在文件顶部是一个好习惯。

以上是关于导入类中的模块,但是在类方法中使用模块时出现NameError的主要内容,如果未能解决你的问题,请参考以下文章

导入 numpy 模块时出现 Python 错误 [重复]

导入节点模块时出现流错误“无法解析模块”

在 Next.js 中动态导入模块时出现“forwardRef”错误

导入我自己的模块时出现“ImportError: No module named...”

在 Spark 中的 EMR 上使用 --py-files 从 .zip 文件(使用 zipfile 包在 python 中创建)导入模块时出现问题

Python - 导入新模块时出现问题 - libgmail