相关疑难解决方法(0)

Python中的自动加载

在过去,我使用了perl的AUTOLOAD工具来实现将符号延迟加载到命名空间中,并希望在python中使用相同的功能.

传统上,你似乎能够得到的最接近的是使用一个类和一个__getattr__类来实现这种事情.不过我也尝试过翻找sys.modules,然后想出来:

# mymod.py
def greet(greeting="Hello World"):
   print greeting

class autoload(object):
    def __init__(self, __name__):
        super(autoload, self).__init__()
        self.wrapped_name = __name__
        self.wrapped = sys.modules[__name__]
    def __getattr__(self, name):
        try:
            return getattr(self.wrapped, name)
        except AttributeError:
            def f():
                greet(name+" "+self.wrapped_name)
            return f

if __name__ != "__main__":
    import sys
    sys.modules[__name__] = autoload(__name__)
Run Code Online (Sandbox Code Playgroud)

从用户的角度来看,这确实是我喜欢的方式:

~> python
Python 2.5.1 (r251:54863, Jan 10 2008, 18:01:57)
[GCC 4.2.1 (SUSE Linux)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import mymod
>>> mymod.hello() …
Run Code Online (Sandbox Code Playgroud)

python coding-style autoload

16
推荐指数
2
解决办法
6002
查看次数

标签 统计

autoload ×1

coding-style ×1

python ×1