在类中导入模块,但在类方法中使用模块时出现名称错误



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

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

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

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

我收到错误:

名称

错误:未定义名称"urllib">

为什么类体中的导入语句不起作用?

我在 Windows 10 中使用 python 3.8.1。

import语句执行名称绑定,但类作用域内的名称在方法中不直接可见。这与任何其他类名相同。

>>> class Test:
...     a = 2   # bind name on class
...     def get_a(self):
...         return a  # unqualified reference to class attribute
...
>>> Test().get_a()
NameError: name 'a' is not defined

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

class test:
import urllib.parse
def __init__(self, url):
#               V refer to attribute in class
urlComponents = self.urllib.parse.urlsplit(url)

请注意,在类中绑定模块没有任何好处,除了在全局范围内隐藏名称。通常,应在全局范围内导入。

import urllib.parse
class test:
def __init__(self, url):
#               V refer to global module
urlComponents = urllib.parse.urlsplit(url)

你缺少的是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)

结果 : <<strong>主要。在0x5029>进行测试

最新更新