Python子项不能使用父项导入的模块

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模块的所有成员


Gle*_*enn 7

子项具有自己的命名空间,并且您没有将sqlite3导入其中.所以你需要将sqlite3导入Child.py.你也可以做import Parent.sqlite3,然后打电话Parent.sqlite3.connect.以这种方式执行它并没有真正的优势,而不是仅仅导入sqlite3,因为模块实际上只导入一次(在代码到达的第一次导入时),以下导入只是将模块添加到当前命名空间.