将自定义函数添加到 Python 中的现有类

克劳斯

假设我有一个 python 程序,它是一个黑匣子,它的作用就像一个处理器。它读取带有一些指令名称的文本文件,解析该文件并从类 Instructions 调用函数。我想要的是允许用户在另一个文件中创建新函数,并允许处理器通过指令类调用这些函数。

示例处理器代码(无法更改):

from instructions import *

instr = Instructions()
code = []
with open('program.txt') as f:
    code = f.readlines()

for line in code:
    command, args = line.split()
    # reads "command arg" and calls "instr.command(arg)"
    string_exec = 'instr.{}({})'.format(command, args)
    eval(string_exec)

示例说明.py:

class Instructions:
    def show(self, arg):
        print(arg, end='')

处理器读取以打印“Hello”的“program.txt”示例:

show 'H'
show 'e'
show 'l'
show 'l'
show 'o'
show '\n'

我希望能够使用新指令从用户读取文件并能够在处理器中执行它们。

也使用指令的用户函数示例:

def print_line(self, args):
    for arg in args:
        instr.show(arg)
    instr.show('\n')

我想以某种方式将用户函数合并到类 Intructions 中,以便处理器能够运行以下“program.txt”:

print_line 'Hello'

简而言之,我想将指令功能分为两个文件,一个是一些基本的“固定”指令,另一个是用户定义的“动态”功能。最后,我想在类说明中加载这两个函数。

zhiwen

像这样的指令.py:

class Instructions:
    def __init__(self):
        self._add_user_function()

    def add(self, a, b):
        return a + b

    def _add_user_function(self):
        import os
        if not os.path.exists('user_instructions.py'):
            return
        from user_instructions import UserInstructions
        self._user_instrucs = UserInstructions(self)
        for prop in dir(self._user_instrucs):
            if prop.startswith('_'):
                continue
            prop_type = type(eval("UserInstructions.%s" % prop))
            if str(prop_type).find("instancemethod") < 0:
                continue
            func_str = "def instr_custom_%s(self, *args, **kwargs):\n    return self._user_instrucs.%s(*args, **kwargs)\n    " % (prop, prop)
            exec(func_str)
            setattr(Instructions, prop, eval("instr_custom_%s" % prop))

    def show(self, arg):
        print(arg)

user_instructions.py 如下所示:

class UserInstructions:

    def __init__(self, instr):
        self.__instr = instr

    def print_line(self, args):
        print(args)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将自定义函数添加到类

来自分类Dev

如何在Python 3.5中将自定义代码添加到HTTPStatus?

来自分类Dev

如何将自定义矩阵添加到 Python 处理中的矩阵转换堆栈?

来自分类Dev

如何将自定义矩阵添加到 Python 处理中的矩阵转换堆栈?

来自分类Dev

将自定义函数添加到Auth类Laravel(扩展了Guard类)

来自分类Dev

将自定义类添加到引导按钮

来自分类Dev

将自定义类添加到引导按钮

来自分类Dev

将自定义类添加到jstree

来自分类Dev

将自定义方法添加到JButton类

来自分类Dev

Yii 1.3 zii.widgets.grid.CGridView将自定义函数添加到类

来自分类Dev

将自定义命令添加到qmake中的现有目标

来自分类Dev

如何使用Java将自定义字段添加到Salesforce中的现有对象

来自分类Dev

将自定义处理程序类添加到 JSF 自定义组件

来自分类Dev

如何使用辅助函数将自定义类名称添加到Handlebars模板中的元素?

来自分类Dev

将自定义变量添加到现有类(如UIButton)的正确方法是什么?

来自分类Dev

将自定义字段添加到Dokan上的现有表单(wordpress / woocoomerce)

来自分类Dev

将自定义样式添加到Mahapps.Metro现有样式

来自分类Dev

Rails将自定义路由添加到现有资源

来自分类Dev

将自定义字段添加到现有视图的问题

来自分类Dev

使用jQuery将自定义CSS类添加到动态创建的元素中

来自分类Dev

在MVC 4中将自定义类添加到DropDownList

来自分类Dev

将自定义类添加到ASP.NET MVC 4中的单选按钮

来自分类Dev

在MVC 4中将自定义类添加到DropDownList

来自分类Dev

将自定义属性添加到更新模型时丢失的.tt POCO类中

来自分类Dev

将自定义标头添加到所有模块中的所有资源

来自分类Dev

将自定义标头添加到.Net中的所有Swagger响应中

来自分类Dev

将自定义标头添加到.Net中的所有Swagger响应中

来自分类Dev

将自定义http标头添加到所有jQuery AJAX请求中

来自分类Dev

python直方图可将自定义颜色添加到不同的值

Related 相关文章

  1. 1

    将自定义函数添加到类

  2. 2

    如何在Python 3.5中将自定义代码添加到HTTPStatus?

  3. 3

    如何将自定义矩阵添加到 Python 处理中的矩阵转换堆栈?

  4. 4

    如何将自定义矩阵添加到 Python 处理中的矩阵转换堆栈?

  5. 5

    将自定义函数添加到Auth类Laravel(扩展了Guard类)

  6. 6

    将自定义类添加到引导按钮

  7. 7

    将自定义类添加到引导按钮

  8. 8

    将自定义类添加到jstree

  9. 9

    将自定义方法添加到JButton类

  10. 10

    Yii 1.3 zii.widgets.grid.CGridView将自定义函数添加到类

  11. 11

    将自定义命令添加到qmake中的现有目标

  12. 12

    如何使用Java将自定义字段添加到Salesforce中的现有对象

  13. 13

    将自定义处理程序类添加到 JSF 自定义组件

  14. 14

    如何使用辅助函数将自定义类名称添加到Handlebars模板中的元素?

  15. 15

    将自定义变量添加到现有类(如UIButton)的正确方法是什么?

  16. 16

    将自定义字段添加到Dokan上的现有表单(wordpress / woocoomerce)

  17. 17

    将自定义样式添加到Mahapps.Metro现有样式

  18. 18

    Rails将自定义路由添加到现有资源

  19. 19

    将自定义字段添加到现有视图的问题

  20. 20

    使用jQuery将自定义CSS类添加到动态创建的元素中

  21. 21

    在MVC 4中将自定义类添加到DropDownList

  22. 22

    将自定义类添加到ASP.NET MVC 4中的单选按钮

  23. 23

    在MVC 4中将自定义类添加到DropDownList

  24. 24

    将自定义属性添加到更新模型时丢失的.tt POCO类中

  25. 25

    将自定义标头添加到所有模块中的所有资源

  26. 26

    将自定义标头添加到.Net中的所有Swagger响应中

  27. 27

    将自定义标头添加到.Net中的所有Swagger响应中

  28. 28

    将自定义http标头添加到所有jQuery AJAX请求中

  29. 29

    python直方图可将自定义颜色添加到不同的值

热门标签

归档