1

上書きしたいいくつかのライブラリをインポートするモジュールがあります。例:

モジュール.py

import md5

def test():
    print(md5.new("LOL").hexdigest())

newfile.py

class fake:
    def __init__(self, text):
        self.text = text
    def hexdigest(self):
        return self.text
import sys
module = sys.argv[1] # It contains "module.py"
# I need some magic code to use my class and not the new libraries!
__import__(module)

編集 1

インポートを実行してから置換を行うのではなく、/*skip*を回避したいのです。

編集 2

コードが修正されました (これは単なる例です)。

4

2 に答える 2

2

まあ、あなたの例はあまり意味がありません.andをaクラスbとして扱っているように見えますnewfile.pyが、モジュールとしてmodule.py-実際にはそれを行うことはできません。このようなものを探していると思います...

モジュール.py

from some_other_module import a, b
ainst = a("Wow")
binst = b("Hello")
ainst.speak()
binst.speak()

newfile.py

class a:
     def __init__(self, text):
         self.text = text
     def speak(self):
         print(self.text+"!")
class b:
     def __init__(self, text):
         self.text = text
     def speak(self):
         print(self.text+" world!")

# Fake up 'some_other_module'
import sys, imp
fake_module = imp.new_module('some_other_module')
fake_module.a = a
fake_module.b = b
sys.modules['some_other_module'] = fake_module

# Now you can just import module.py, and it'll bind to the fake module
import module
于 2013-04-15T15:50:42.413 に答える
0

空の dicts を asglobalsおよびlocalsto に渡します__import__。それらから必要なものをすべて削除してから、 and を更新しglobalsますlocals

tmpg, tmpl = {}, {}
__import__(module, tmpg, tmpl)
# remove undesired stuff from this dicts
globals.update(tmpg)
locals.update(tmpl)
于 2013-04-15T15:20:38.790 に答える