Twisted には twisted/python/reflect.py として #2 があります。Django の urls.py 構成のように、文字列ベースの構成システムを作成するには、このようなものが必要です。
コードとバージョン管理ログを見て、それを機能させるために何をしなければならなかったかを確認してください。- 正しい方法。
あなたが探している他のものは、Python環境に十分な制限を課し、汎用ソリューションのようなものはありません.
これはあなたの#1をいくらか実装するものです
>>> import pickle
>>> def identify(f):
... name = f.__name__
... module_name = pickle.whichmodule(f, name)
... return module_name + "." + name
...
>>> identify(math.cos)
'math.cos'
>>> from xml.sax.saxutils import handler
>>> identify(handler)
'__main__.xml.sax.handler'
>>>
あなたの#3は定義が不十分です。私が行った場合
__builtin__.step = path.to.your.stap
次に、検索コードはそれを「ステップ」として検出する必要がありますか?
私が考えることができる最も単純な実装は、単にすべてのモジュールを検索し、まさにあなたが望むものであるトップレベルの要素を探します
>>> import sys
>>> def _find_paths(x):
... for module_name, module in sys.modules.items():
... if module is None:
... continue
... for (member_name, obj) in module.__dict__.items():
... if obj is x:
... yield module_name + "." + member_name
...
>>> def find_shortest_name_to_object(x):
... return min( (len(name), name) for name in _find_paths(x) )[1]
...
>>> find_shortest_name_to_object(handler)
'__builtin__._'
>>> 5
5
>>> find_shortest_name_to_object(handler)
'xml.sax.handler'
>>>
ここで、'handler' が実際には前の式 return から _ に入っていて、これが最短の名前になっていることがわかります。
すべてのモジュールのすべてのメンバーを再帰的に検索するなど、他の何かが必要な場合は、コードを作成してください。しかし、「_」の例が示すように、驚きがあります。さらに、別のモジュールをインポートすると、別のオブジェクト パスが使用可能になり、短くなる可能性があるため、これは安定していません。
そういうわけで、あなたが欲しいものは実際には何の役にも立たないと人々が何度も繰り返し言い、それがモジュールがない理由です。
4 番目については、一般的なパッケージでこれらのネーミングのニーズにどのように対応できますか?
いずれにせよ、あなたは書いた
これらの簡単な実装を私に見せようとしないでください。見た目よりも複雑で、多くの落とし穴があり、簡単なコードは多くの重要なケースで失敗する可能性があります。この種のタスクには、実戦でテスト済みのコードが必要です。
したがって、私の例を解決策と考えないでください。あなたが求めていることがほとんど意味をなさない理由の例として考えてください。それは非常に壊れやすいソリューション空間であり、(主に好奇心のために) そこに足を踏み入れる少数の人々は非常に異なる懸念を持っているため、1 回限りのカスタム ソリューションが最適です。これらのほとんどのモジュールは意味がありません。意味がある場合、モジュールが何をするかの説明はおそらくコードよりも長くなります。
したがって、あなたの質問に対する答えは「いいえ、そのようなモジュールはありません」です。
あなたの質問をさらに混乱させるのは、PythonのC実装がすでに「オブジェクトアドレス」を定義していることです。id()のドキュメントは次のように述べています。
CPython 実装の詳細: これはオブジェクトのアドレスです。
探しているのは、オブジェクトの名前またはパスです。「Python オブジェクト アドレス」ではありません。