これまで、私はperlのAUTOLOAD機能を使ってシンボルの名前空間への遅延ロードを実装しましたが、Pythonでは同じ機能が必要でした。Pythonの自動ロード
伝統的にあなたが得ることができるように見えるのは、この種のことを達成するためにクラスと__getattr__
クラスを使用することです。しかし、私はまた、sys.modules
の周り臨検試みたが、これを作ってみた:
# mymod.py
def greet(greeting="Hello World"):
print greeting
class autoload(object):
def __init__(self, __name__):
super(autoload, self).__init__()
self.wrapped_name = __name__
self.wrapped = sys.modules[__name__]
def __getattr__(self, name):
try:
return getattr(self.wrapped, name)
except AttributeError:
def f():
greet(name+" "+self.wrapped_name)
return f
if __name__ != "__main__":
import sys
sys.modules[__name__] = autoload(__name__)
これは、私は、ユーザーの視点からみたい道に動作しない:
~> python
Python 2.5.1 (r251:54863, Jan 10 2008, 18:01:57)
[GCC 4.2.1 (SUSE Linux)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import mymod
>>> mymod.hello()
hello
>>> from mymod import Hello_World
>>> Hello_World()
Hello_World
をしかし、それは私を打ちます - 人々がPythonで自動ロードするために使用する傾向がある標準的なアプローチはありますか?
第2に、経験豊富なPython開発者向けの質問は、実際には「これがあなたを良いか悪い練習として打つのですか」です。私は合理的に経験豊富なPython開発者ですが、それは本当に便利だと思いますが、それは境界線として私を襲って、これが良い練習、悪い練習または同様のものと見なすことができるかどうかに興味があります。
ありがとうございます!
https://stackoverflow.com/questions/2447353/getattr-on-a-module and https://stackoverflow.com/questions/922550/how-to-mark-a-global-as-deprecated-in -pthon/922693#922693 – n611x007
質問テキストとコードとタグの変更が私の元の質問を反映しないため、できればこれを削除します。以下の回答は特に役に立ちません。私は人々が質問文を変更する前に実際に尋ねることを望む。たとえば、元のコードが "mod_name"ではなく "\ _ \ _ name \ _ \ _"を使用した理由は、sys.modules [\ _ \ _ name \ _ \ _]などと直接の類似性を示すことです。これは編集によって破られました。 –
@MichaelSparks:あなたの質問をSilentGhostのマイナー編集に戻しました。うまくいけば、それは今よりよく答えにマッチします。誰も他の人の質問でコードを編集する必要はありません。 –