Pas*_*ist 2 python module subscript
我试图做这样的事情:
module.py
def __getitem__(item):
return str(item) + 'Python'
Run Code Online (Sandbox Code Playgroud)
test.py
import module
print module['Monty']
Run Code Online (Sandbox Code Playgroud)
我希望打印出"MontyPython".但是,这不起作用:
TypeError: 'module' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)
是否可以在纯Python中创建一个可订阅模块(即不修改其源代码,猴子修补等)?
>>> 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
Run Code Online (Sandbox Code Playgroud)
您可以使用ModModule(globals())来替换sys中的当前模块.
| 归档时间: |
|
| 查看次数: |
1686 次 |
| 最近记录: |