saz*_*azr 14 python polymorphism import inheritance
在Python中使用Inheritence时,我有一个有趣的导入错误.
在父类中我导入模块sqlite3,在子类中我然后尝试使用sqlite3函数,但是我收到一条错误,说"NameError:全局名称'sqlite3'未定义".为什么会发生这种情况以及如何解决?
这两个类位于不同的文件中:
Parent.py
import sqlite3
class Parent:
def __init__(self):
self.create_database()
def create_database(self):
""" Virtual function to be overriden in child classes """
pass
...more class functions that use sqlite3 functions
Run Code Online (Sandbox Code Playgroud)
Child.py
import Parent
class Child( Parent.Parent ):
def create_database(self):
self.db = sqlite3.connect("test.db") # Error occurs HERE
c = Child()
Run Code Online (Sandbox Code Playgroud)
bab*_*bak 18
sqlite3模块导入到父模块中,因此您需要通过该模块访问它
self.db = Parent.sqlite3.connect("test.db")
Run Code Online (Sandbox Code Playgroud)
它不会直接导入Child模块,除非你告诉python这样做
from Parent import *
Run Code Online (Sandbox Code Playgroud)
将允许您从Child模块中访问Parent模块的所有成员
子项具有自己的命名空间,并且您没有将sqlite3导入其中.所以你需要将sqlite3导入Child.py.你也可以做import Parent.sqlite3,然后打电话Parent.sqlite3.connect.以这种方式执行它并没有真正的优势,而不是仅仅导入sqlite3,因为模块实际上只导入一次(在代码到达的第一次导入时),以下导入只是将模块添加到当前命名空间.