2016-06-01 11 views
0

私が持っているこのようなビットに見える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") 

私がしたいのa.pyで元の(オーバーライドされていない)機能にアクセスできるはずがないので、b.pyのコードを無効にするにはどうすればよいですか?

+0

名前* sqlite3 *はモジュール* a *を介してアクセスできないはずですか?その場合、これを見てください:http://stackoverflow.com/questions/44834/can-someone-explain-all-in-python。あなたが求めているのは正確ではありませんが、少なくとも輸入*でそれらを隠しています。 –

+0

なぜそれをやりたいですか? – jonrsharpe

+0

@jonrsharpe私のプロジェクトでは、ユーザはPythonでコードを書くことができますが、モジュールにアクセスすることはできませんが、私が必要とするモジュールはすべてうまくいきますが、唯一の問題は彼が組み込みのモジュールにアクセスできることです(私は彼も欲しくない)私のモジュールを介して。 – Jim

答えて

1

私は恐れることはできません!詳細については、ここをクリックしてください:https://stackoverflow.com/a/1547163/1548838

import sqlite3 as _sqlite3を使用して、後で_sqlite3.connectのように使用してください。これはあなたのモジュールユーザーに(この慣例でのみ)この属性を使わないように指示します。

また、インポートすることを防ぐために、上記のIljaEveriläとしてモジュール変数__all__を使用することもできます。

0

これはどうですか?目標に応じて、関数/ lambda内で名前を非表示にすることが時々あります。

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

とにかく、私はPythonでモジュールを隠そうとするのは妥当ではないと思います。

関連する問題