Вопрос по python – Python: индекс модуля
Я пытался сделать что-то вроде этого:
module.py
<code>def __getitem__(item): return str(item) + 'Python' </code>
test.py
<code>import module print module['Monty'] </code>
Я ожидал, что "MontyPython" быть напечатанным. Однако это не работает:
<code>TypeError: 'module' object is not subscriptable </code>
Можно ли создать подписной модуль на чистом Python (то есть без изменения его исходного кода, установки обезьян и т. Д.)?
Я не думаю, что крутость стоит усилий. Просто продолжайте сdot синтаксис. На мой взгляд, это намного лучше.
почему ты хочешь это сделать?
Я пишу приложение, которому нужен доступ к определенному глобальному состоянию из разных мест. Я думал, что было бы здорово иметь что-то вроде:
import state; state[something_specific] = new_stuff
чемfrom state_class import state; ...
1
ответ
>>> 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.
Похожие вопросы
Я не думаю, что крутость стоит усилий. Просто продолжайте сdot синтаксис. На мой взгляд, это намного лучше.
почему ты хочешь это сделать?
Я пишу приложение, которому нужен доступ к определенному глобальному состоянию из разных мест. Я думал, что было бы здорово иметь что-то вроде:<code>import state; state[something_specific] = new_stuff</code> чем<code>from state_class import state; ...</code>