Python3通过类方法、函数获取对应类名

 今天写代码为了少传一个参数,想在装饰器中通过传入的函数获取函数所在的类,stackoverflow给出了答案

Python3中通过函数的__qualname__属性获取就好

据说Python2中可以用im_class

完整的示例代码:

from functools import wraps

def decorater(func):  
    @wraps(func)#保持原函数名不变
    def wrapper(*args,**kwargs):
        res=func(*args,**kwargs)
        print('装饰器内函数名:%s'%func.__name__)
        print('返回值:%s'%res)
        print('函数func所属的类:%s'%func.__qualname__)
        return res
    return wrapper


class Name():
    @decorater
    def func(self,*args,**kwargs):
        print('位置参数:{}'.format(args))
        print('关键字参数:{}'.format(kwargs))
        return 'return'

if __name__ == '__main__':
    a=Name()
    a.func(1,2,a=3,b=4)
    print('装饰外内函数名:%s' % a.func.__name__)


打印结果:

位置参数:(1, 2)
关键字参数:{'a': 3, 'b': 4}
装饰器内函数名:func
返回值:return
函数func所属的类:Name.func
装饰外内函数名:wrapper

可以到成功获取了的函数对应的类和函数名:Name.func

参考:

https://stackoverflow.com/a/40953053/9917670

https://docs.python.org/3/library/inspect.html#types-and-members

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值