• python通过实例方法名字的字符串调用方法


    目录

     

    方式1 - 反射

    hasattr 方法

    判断当前实例中是否有着字符串能映射到的属性或者方法, 一般会在 getattr 之前作为判断防止报错

     

    getattr 方法

    获取到当前实例中传入字符串映射到的属性或者方法

     

    示例

    class A(object):
        def run(self):
            return "run"
    ​
    ​
    a = A()
    ​
    print hasattr(a, "run")         # True
    print getattr(a, "run")         # <bound method A.run of <__main__.A object at 0x0000000002A57160>>
    print getattr(a, "run")()       # run

     

    方式2 - operator 模块

    methodcaller 方法

    参数

    传入两个参数, 分别为字符串表示映射的方法, 另一个参数为此方法的运行参数,

    返回值

    返回一个 字符串映射到的方法实例

     

    示例

    import operator
    ​
    ​
    class A(object):
        def run(self):
            return "run"def eat(self, s):
            return s + ": eat"
    ​
    ​
    a = A()
    ​
    print operator.methodcaller("run")  # <operator.methodcaller object at 0x0000000002ADAC08>
    print operator.methodcaller("run")(a)   # run
    print operator.methodcaller("eat", "yangtuo")(a)    # yangtuo: eat

     

    方式3 - eval 模块

    eval虽然方便,但是要注意安全性,可以将字符串转成表达式并执行,就可以利用执行系统命令,删除文件等操作。
    假设用户恶意输入。比如:

    eval("__import__('os').system('ls /Users/chunming.liu/Downloads/')")

    那么eval()之后,你会发现,当前文件夹文件都会展如今用户前面。这句其实相当于执行了

    os.system('ls /Users/chunming.liu/Downloads/')

    不建议使用,因此此处不做示例

     

  • 相关阅读:
    IP 地址无效化
    上升下降字符串
    STL-----map
    只出现一次的数字
    4的幂
    GDI+_入门教程【一】
    大白话系列之C#委托与事件讲解(二)
    大白话系列之C#委托与事件讲解(二)
    大白话系列之C#委托与事件讲解(一)
    大白话系列之C#委托与事件讲解(一)
  • 原文地址:https://www.cnblogs.com/cherylgi/p/14298195.html
Copyright © 2020-2023  润新知