sys.modules
正如已经说过的,黑客可以做到这一点。
请注意,如果您可以控制模块ResourceX
,那么它自己处理它肯定会更好。这实际上是编写在某些资源存在时工作得更好的模块时的常见模式,例如:
# foo.py
'''A module that provides interface to foo.
Falls back to a dummy interface if foo is not available.
'''
try:
from _foo import *
except ImportError:
from _foo_dummy import *
有时人们以更面向对象的方式来做这件事:
# foo.py
'''A module that provides interface to foo if it exists or to a dummy interface.
Provides:
frobnicate() self-explanatory
...
'''
class DummyFoo:
def frobnicate(self):
pass
...
class UnixFoo(DummyFoo):
def frobnicate(self):
a_posix_call()
...
class GenericFoo(DummyFoo):
def frobnicate(self):
do_something_complicated()
...
# Create a default instance.
try:
if (system == UNIX)
instance = UnixFoo(system)
else:
instance = GenericFoo()
except Exception:
instance = DummyFoo()
# Now export the public interface.
frobnicate = instance.frobnicate