在我的python脚本中,我试图在类中导入模块,并在class方法中使用导入的模块。
class test:
import urllib.parse
def __init__(self, url):
urlComponents = urllib.parse.urlsplit(url)
但是,当我尝试使用测试类时,例如
test("http://test.com")
我得到了错误:
NameError:名称'urllib'未定义
为什么类主体中的import语句不生效?
我在Windows 10中使用python 3.8.1。
答案 0 :(得分:1)
您失踪是self.urllib.parse。
如果您确实要在类中导入模块,则必须从该类中访问它:
spl
答案 1 :(得分: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)
答案 2 :(得分:-1)