当前位置: 首页 > 面试题库 >

在Python中自动加载

子车超英
2023-03-14
问题内容

过去,我使用过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__)

从用户的角度来看,这确实可以满足我的需求:

~> 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()
hello
>>> from mymod import Hello_World
>>> Hello_World()
Hello_World

但这让我感到震惊-人们是否倾向于使用标准方法在python中自动加载?

其次,对于经验丰富的python开发人员来说,一个问题确实是“这对您来说是好事还是坏事”?我是一位经验丰富的python开发人员,它使我感到非常有用,但让我感到震惊,并对是否可以将其视为良好实践,不良实践或类似行为感兴趣。

谢谢!


问题答案:

要回答使用类来模拟模块的问题:

是的,功能并非偶然。从2.x系列的早期开始就已经存在,至今仍在3.x系列中使用。

要回答延迟加载的问题:

有几种方法可以做到,每种方法都会有些神秘。使用模块模拟器是一种很好的方法。



 类似资料:
  • 问题内容: 我希望IPython或Python解释器在启动它们时自动加载模块。 可能吗? 例如,当我启动IPython时: 在教程页面中可以找到类似SymPy的live shell的 东西。 问题答案: 检查文件-您可以列出要在启动时加载的所有模块。

  • 问题内容: 我是python的新手,想知道如何在我的程序运行时制作加载动画。我需要这样做是因为我不希望用户认为程序陷入了死循环。我喜欢这样的东西… 正在加载…(点消失并一一出现) 谢谢! 问题答案: 如果您的输出窗口支持回车符,则可以打印它以使光标返回到当前行的开头(前提是您的语句以逗号结尾,因此不会自动打印换行符)。然后,后续打印将覆盖已打印的内容。您可以使用它来做非常简单的单行动画。例: …

  • 问题内容: 如何从Android客户端自动递增存储在Firebase中的值? 当前:我声明。当我增加时,我看到值2、3等被存储。很好,但是当我重新运行项目时,再次设置为等于1。 我希望它的行为像静态变量一样,因此我可以创建一个从1到无穷大的id,而无需重置。 更新失败 我使用以下代码将Firebase参考和一个字符串传递给函数incrementCounter。 现在,我尝试在oncomplete方

  • 本文向大家介绍在Python中自动执行PDF,包括了在Python中自动执行PDF的使用技巧和注意事项,需要的朋友参考一下 使用的模块: 在此脚本中,我们将使用PyPDF2模块,该模块将为我们提供各种功能,例如提取数据,读取pdf文件,拆分文件并写入新文件。 下载PyPDF2: 通用方式:pip安装PyPDF2 Pycharm用户:转到python项目解释器并从那里安装它。 PyPDF2提供的各种

  • 问题内容: 我知道我可以通过执行以下操作来向对象动态添加实例方法: 稍后我可以打电话给我,自我将被正确绑定,一切正常。 现在,我的问题是:如何做完全相同的事情来获得用@property装饰新方法的行为? 我猜是这样的: 但是,这样做会返回一个属性对象。 问题答案: 在描述对象需要住 类 , 未 在 实例中 ,有你想要的效果。如果您不想更改现有的类以避免更改其他实例的行为,则需要创建“每个实例的类”

  • 问题内容: 有没有办法在Python中建立一个自动增长的列表?我的意思是制作一个列表,该列表将在引用不存在的索引时增长。基本上是Ruby数组的行为。 提前致谢! 问题答案: 当然有可能,您只需要使用list的子类即可。 用法: