在我的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)