書き込みからあなたを止めるものは何もありません:
db1=project.db1
db2=project.db2
それはDB1とDB2があることをあなたの例から見えますメソッド。もしそうなら、あなたは割り当てをして、db1()
またはdb2()
を望むように呼び出すことができます。
変更可能な属性の場合は、それらを安全に変更することができますが、ショートネームを再バインドしても元のアトリビュートには影響しません(インポートから作成された名前を再バインドしてもオリジナルには影響しません)。
Pythonの標準ライブラリでは、このトリックをいくつかの場所で使用しています。たとえばRandom
クラスを公開しても、それのインスタンスを作成し、平野の名前を通じて、そのインスタンスのメソッドをエクスポートしたrandom.py
を見て:私はの__all__
リストを構築するためにデコレータを使用し、自動的にそれを行うには
# Create one instance, seeded from current time, and export its methods
# as module-level functions. The functions share state across all uses
#(both in the user's code and in the Python libraries), but that's fine
# for most programs and is easier for the casual user than making them
# instantiate their own Random() instance.
_inst = Random()
seed = _inst.seed
random = _inst.random
uniform = _inst.uniform
triangular = _inst.triangular
...
(あなたがあなたのモジュールをインポートしている人のために必要な)エクスポートされた名前を作成して、クラスをインスタンス化した後に別々に名前を作成します。
__all__ = []
def exported(f):
__all__.append(f.__name__)
return f
class Project:
@exported
def db1(self): ...
project = Project()
for name in __all__:
if hasattr(project, name):
globals()[name] = getattr(project, name)
私はそれが可能であっても、それはお粗末になる可能性が高いので、それをしないことをお勧めします。むしろ 'project'を' proj'や 'P'のように短い名前に変更するべきです。 –