>>> class ModModule(object):
def __init__(self, globals):
self.__dict__ = globals
import sys
sys.modules[self.__name__] = self
def __getitem__(self, name):
return self.__dict__[name]
>>> m = ModModule({'__name__':'Mod', 'a':3})
>>> import Mod
>>> Mod['a']
3
# subclassing the actual type won't work
>>> class ModModule(types.ModuleType):
def __init__(self, globals):
self.__dict__ = globals
import sys
sys.modules[self.__name__] = self
def __getitem__(self, name):
return self.__dict__[name]
>>> m = ModModule({'__name__':'Mod', 'a':3})
Traceback (most recent call last):
File "<pyshell#114>", line 1, in <module>
m = ModModule({'__name__':'Mod', 'a':3})
File "<pyshell#113>", line 3, in __init__
self.__dict__ = globals
TypeError: readonly attribute
sysの現在のモジュールを置き換えるのに、ModModule(globals())を使用できます。
なぜそれをしたいですか? – cobie
私は、さまざまな場所から特定のグローバル状態にアクセスする必要のあるアプリケーションを作成しています。私はそれが次のようなものを持つのはクールだと思った: 'import state; 状態[something_specific] = new_stuff' より 'from state_class import state; ... ' – Pastafarianist
私は涼しさが努力の価値があるとは思わない。 *ドット*の構文に進むだけです。私の意見では、はるかに良いです。 – cobie