在 Class 中导入模块,但在 class 方法中使用模块时出现 NameError
import module in Class, but NameError when using module in class method
在我的 python 脚本中,我试图在 class 中导入模块并在 class 方法中使用导入的模块。
class test:
import urllib.parse
def __init__(self, url):
urlComponents = urllib.parse.urlsplit(url)
然而,当我尝试使用 class 测试时,例如
test("http://test.com")
我收到错误:
NameError: name 'urllib' is not defined
为什么class body中的import语句不生效?
我在windows10中使用python3.8.1。
self.urllib.parse 你不见了。
如果您真的想在 class 中导入模块,您必须从 class:
访问它
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 范围内的名称在方法内部不直接可见。这与任何其他 class 名称相同。
>>> 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 或实例来引用任何 class 属性。这也适用于导入的名称。
class test:
import urllib.parse
def __init__(self, url):
# V refer to attribute in class
urlComponents = self.urllib.parse.urlsplit(url)
请注意,在 class 中绑定模块没有任何优势,除了在全局范围内隐藏名称之外。通常,您应该在全局范围内导入。
import urllib.parse
class test:
def __init__(self, url):
# V refer to global module
urlComponents = urllib.parse.urlsplit(url)
在我的 python 脚本中,我试图在 class 中导入模块并在 class 方法中使用导入的模块。
class test:
import urllib.parse
def __init__(self, url):
urlComponents = urllib.parse.urlsplit(url)
然而,当我尝试使用 class 测试时,例如
test("http://test.com")
我收到错误:
NameError: name 'urllib' is not defined
为什么class body中的import语句不生效?
我在windows10中使用python3.8.1。
self.urllib.parse 你不见了。
如果您真的想在 class 中导入模块,您必须从 class:
访问它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 范围内的名称在方法内部不直接可见。这与任何其他 class 名称相同。
>>> 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 或实例来引用任何 class 属性。这也适用于导入的名称。
class test:
import urllib.parse
def __init__(self, url):
# V refer to attribute in class
urlComponents = self.urllib.parse.urlsplit(url)
请注意,在 class 中绑定模块没有任何优势,除了在全局范围内隐藏名称之外。通常,您应该在全局范围内导入。
import urllib.parse
class test:
def __init__(self, url):
# V refer to global module
urlComponents = urllib.parse.urlsplit(url)