【python】——setattr为模块动态添加属性

本文通过两个示例介绍了Python中setattr函数的使用,它允许动态地为模块或对象添加属性。第一个例子展示了在普通Python脚本中如何使用setattr添加函数到模块,第二个例子解释了在tvm库中,如何利用setattr将C函数绑定到Python模块,实现Python与C的交互。这两个例子突显了setattr在动态编程和跨语言绑定中的关键作用。
摘要由CSDN通过智能技术生成

关键词:python, setattr

1. python中的例子

_ffi_api.py

import sys

thismodule = sys.modules[__name__]

def addfunc():
    a = 1
    b = 2
    c = a + b 
    print("c value is:", c)


def subfunc(a, b):
    c = a - b
    print("a - b is:", c)

setattr(thismodule, "add", addfunc)
setattr(thismodule, "sub", subfunc)

test.py

import _ffi_api

print("test setattr")
_ffi_api.add()
_ffi_api.sub(20, 5)

输出

test setattr
c value is: 3
a - b is: 15

2. tvm中的例子

tvm中需要为一些python模块绑定C中的函数,于是采用了类似上面的方式。

tvm._ffi._init_api("ir", __name__)

def _init_api_prefix(module_name, prefix):
    module = sys.modules[module_name]

    for name in list_global_func_names():
        if not name.startswith(prefix):
            continue

        fname = name[len(prefix) + 1 :]
        target_module = module          # python中的module

        if fname.find(".") != -1:
            continue
        f = get_global_func(name)       # 根据 name 得到 c 中的函数
        ff = _get_api(f)                # 设置 is_global 属性为 true
        ff.__name__ = fname
        ff.__doc__ = "TVM PackedFunc %s. " % fname
        setattr(target_module, ff.__name__, ff)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值