导入类中的模块,但是在类方法中使用模块时出现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)
导入总是放在文件的顶部,紧随任何模块之后注释和文档字符串,以及模块全局变量和常量之前。
我认为将导入放在文件顶部是一个好习惯。
以上是关于导入类中的模块,但是在类方法中使用模块时出现NameError的主要内容,如果未能解决你的问题,请参考以下文章
在 Next.js 中动态导入模块时出现“forwardRef”错误
导入我自己的模块时出现“ImportError: No module named...”
在 Spark 中的 EMR 上使用 --py-files 从 .zip 文件(使用 zipfile 包在 python 中创建)导入模块时出现问题