拒绝访问模块中的导入模块

时间:2016-06-01 08:12:21

标签: python

我的代码中有一个名为a.py的模块,看起来有点像这样:

import sqlite3
from sqlite3 import *
"""The point of importing twice in a different way is to
have a.py imported by someone and have all the sqlite3 functions (with some overriden by a.py)
but a.py still needs access to the source sqlite3 functions that he overrides"""
def connect(database): #overriding sqlite3's connect()
    print "It worked!"
    return sqlite3.connect(database)

和一个名为b.py的文件:

import a
a.sqlite3.connect("data.db")

我想让b.py中的代码无效,因为没有人能通过a.py访问原始(非覆盖)函数,我该怎么做?

2 个答案:

答案 0 :(得分:1)

我怕你不能!点击此处了解更多详情:https://stackoverflow.com/a/1547163/1548838

但您仍然可以使用import sqlite3 as _sqlite3并稍后使用_sqlite3.connect。这将告诉您的模块用户(仅限于约定)不使用此属性。

你仍然可以使用__all__模块变量作为IljaEverilä提到以防止导入*。

答案 1 :(得分:0)

这个怎么样?根据目标,有时可以在函数/ lambdas中隐藏名称。

def connect(database): #overriding sqlite3's connect()
   import sqlite3
   print "It worked!"
   return sqlite3.connect(database)

但无论如何,我不认为尝试隐藏Python中的模块是合理的。