Python 中的动态/运行时方法创建(代码生成)

2024-03-25

我需要在运行时为方法生成代码。能够运行任意代码并拥有文档字符串非常重要。

我想出了一个结合的解决方案exec and setattr,这是一个虚拟示例:

class Viking(object):
    def __init__(self):
        code = '''
            def dynamo(self, arg):
                """ dynamo's a dynamic method!
                """
                self.weight += 1
                return arg * self.weight
            '''
        self.weight = 50

        d = {}
        exec code.strip() in d
        setattr(self.__class__, 'dynamo', d['dynamo'])


if __name__ == "__main__":
    v = Viking()
    print v.dynamo(10)
    print v.dynamo(10)
    print v.dynamo.__doc__

有没有更好/更安全/更惯用的方法来达到相同的结果?


基于 Theran 的代码,但将其扩展到类上的方法:



class Dynamo(object):
    pass

def add_dynamo(cls,i):
    def innerdynamo(self):
        print "in dynamo %d" % i
    innerdynamo.__doc__ = "docstring for dynamo%d" % i
    innerdynamo.__name__ = "dynamo%d" % i
    setattr(cls,innerdynamo.__name__,innerdynamo)

for i in range(2):
    add_dynamo(Dynamo, i)

d=Dynamo()
d.dynamo0()
d.dynamo1()


哪个应该打印:


in dynamo 0
in dynamo 1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 中的动态/运行时方法创建(代码生成) 的相关文章

  • 在 python 程序中合并第三方库的最佳实践是什么?

    下午好 我正在为我的工作编写一个中小型Python程序 该任务需要我使用 Excel 库xlwt and xlrd 以及一个用于查询 Oracle 数据库的库 称为CX Oracle 我正在通过版本控制系统 即CVS 开发该项目 我想知道围
  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • 使用 Python 的 matplotlib 选择在屏幕上显示哪些图形以及将哪些图形保存到文件中

    我想用Python创建不同的图形matplotlib pyplot 然后 我想将其中一些保存到文件中 而另一些则应使用show 命令 然而 show 显示all创建的数字 我可以通过调用来避免这种情况close 创建我不想在屏幕上显示的绘图
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐

  • 使用预先签名的 URL 将文件放入 S3

    我整夜都在使用 Amazon S3 预签名 URL 来尝试 PUT 文件 我在 java 代码中生成预签名 URL AWSCredentials credentials new BasicAWSCredentials accessKey s
  • iPhone : 自定义标签栏,没有可怕的“更多”菜单

    所以我想构建一个具有超过 5 个项目并且可滚动的选项卡栏并找到本文 http www rumex it 2010 11 how to customise the tab bar uitabbar in an iphone applicati
  • “OpenCV”被视为未找到

    Linux 风格 Debian Crunch Bang 出现问题 尝试使用以下命令构建 cvblob 时 cd cvblob cmake Error CMake Error at cvBlob CMakeLists txt 20 find
  • NuGet 如何将属性应用于文件

    我正在创建 NuGet 包 我已经放入了两个文件content用户安装此软件包时将添加的文件夹 exe 和配置文件 另外我想更改这两个文件的 VS 项目属性 构建包时我需要做什么 当您说 应用属性更改 时 您是指文件系统属性 例如上次修改时
  • 通过 Xcode 发布时:下载的软件组件已损坏且无法使用

    在尝试通过 Xcode 发布 iOS 应用程序并通过大部分验证后 我收到以下错误 下载的软件组件已损坏且无法使用 https contentdelivery itunes apple com transporter repositories
  • 如何使用 Fabric.js 在画布上画一条线

    我正在使用 Fabric js 在画布上画一条线 这是我的代码 但我没有得到任何输出 Line click function alert Line canvas add new fabric Line 50 100 200 200 left
  • 使用 php 创建像 Twitter 或 Convore 这样的提及

    你好 我只是好奇 关于他们如何做事 我认为他们会做这样的事情 someone1 im stacking on stackoverflow RT someone2 hello guys what are you doing 在我以我的方式做之
  • 静态库 API 问题(std::string 与 char*)

    我以前没有使用过静态库 但现在我需要 设想 我正在 Unix 中编写一个控制台应用程序 我自由使用std string无处不在 因为这样做很容易 然而 我最近发现我必须在 Windows 中支持它 并且第三方应用程序需要 API 来连接我的
  • 使用 iText 检测动态 XFA

    我需要将预先填充的 PDF XFA 表单设置为只读 因为没有输入 例如文本 复选框 单选按钮等可以更改其值 对于常规 AcroForms PDF 和静态 XFA 表单 我可以通过调用来完成此操作setFormFlattening true
  • 为什么python的subprocess.call是这样实现的?

    subprocess模块 具有便捷的功能call 在2 6和3 1中都是这样实现的 def call popenargs kwargs return Popen popenargs kwargs wait 该函数的文档带有红色警告 内容如下
  • 多用户应用程序无需安装任何东西 - 允许并发用户写入的嵌入式数据库? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我需要创建一个应用程序 被多个用户同时使用 不需要any安装 有一个集中的数据存储 数据必须被存储inside公司网络 i 无权访问到公司内部数
  • 更新 UpdatePanel 内的标签

    我在更新面板中有一个标签和按钮 当我尝试从按钮单击上的标签获取值时 我从标签获取值 但是当我尝试将值设置为标签时 它不会发生 我检查了 JavaScript 错误 但没有任何错误 有人猜测可能是什么原因吗 我正在使用 dotnetnuke
  • 程序“[4432] iisexpress.exe”已退出,代码为-2147023895 (0x800703e9)

    我在使用 IIS Express 时遇到了非常令人沮丧的问题 当我开始调试时一切正常 但在几次请求后 IIS 挂起并崩溃 我的浏览器 Chrome 版本 37 0 2062 120 m 等待响应几秒钟 然后 IIS Express 停止运行
  • 在 webview android 中启用复制和粘贴

    是否可以从网络视图中选择文本然后进行复制和粘贴 有什么特殊的方法可以做到这一点吗 请帮助我 希望对你有帮助 public void selectAndCopyText try Method m WebView class getMethod
  • 如何在启用协程的改造界面中重试 API 调用

    我有一个用例 每当 API 调用中发生诸如互联网丢失或未知错误之类的一般错误时 需要显示带有重试按钮的错误 UI 当用户按下重试之前失败的 API 时 应该调用并恢复用户流程 迁移协程方法前的API接口 interface TodoServ
  • 如何更改单选按钮的文本

    我有一个单选按钮 需要根据用户输入动态更新 但正常情况下 val text and html 行不通的 如何使用 jQuery 或纯 JavaScript 更改单选按钮的文本 无线电输入没有文字 一切都是这样的
  • Go程序陷入死锁

    这是我的 Golang 程序 我正在使用它只是为了让我的概念正确 当我运行程序时 它陷入僵局 我不明白为什么 请有人指出出了什么问题吗 package main import fmt sync var wg sync WaitGroup f
  • 无法调用 DLL 导入条目、C# -> C++、EntryPointNotFoundException

    我正在尝试从 C 调用用 C 编写的自定义 DLL 中的函数 但是 我在代码分析期间收到警告 并在运行时收到错误 警告 CA1400 Microsoft 互操作性 正确 的声明 SafeNativeMethods SetHook 这样 它正
  • java.lang.NoClassDefFoundError Main(错误名称:com/leslie/quiz/Main)

    我有三节课 主要 核心和开始 这是主要的代码 package com leslie quiz public class Main public static void main String args com leslie quiz Sta
  • Python 中的动态/运行时方法创建(代码生成)

    我需要在运行时为方法生成代码 能够运行任意代码并拥有文档字符串非常重要 我想出了一个结合的解决方案exec and setattr 这是一个虚拟示例 class Viking object def init self code def dy