栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

函数是否有引用自身的通用方法?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

函数是否有引用自身的通用方法?

函数没有通用的方式引用自身。考虑改用装饰器。如果您想要的只是打印有关可以通过装饰器轻松完成的功能的信息,请执行以下操作:

from functools import wrapsdef showinfo(f):    @wraps(f)    def wrapper(*args, **kwds):         print(f.__name__, f.__hash__)         return f(*args, **kwds)    return wrapper@showinfodef aa():    pass

如果确实需要引用该函数,则只需将其添加到函数参数中即可:

def withself(f):    @wraps(f)    def wrapper(*args, **kwds):        return f(f, *args, **kwds)    return wrapper@withselfdef aa(self):      print(self.__name__)      # etc.

编辑以添加备用装饰器

您还可以编写一个更简单(可能更快)的装饰器,以使包装的函数在Python的自省下正常工作:

def bind(f):    """Decorate function `f` to pass a reference to the function    as the first argument"""    return f.__get__(f, type(f))@binddef foo(self, x):    "This is a bound function!"    print(self, x)>>> foo(42)<function foo at 0x02A46030> 42>>> help(foo)Help on method foo in module __main__:foo(self, x) method of builtins.function instance    This is a bound function!

这利用了Python的描述符协议:函数具有

__get__
用于创建绑定方法的方法。装饰器仅使用现有方法使函数成为自身的绑定方法。它仅适用于独立功能,如果您想要一种能够引用自身的方法,则您必须做更多类似于原始解决方案的事情。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/633810.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号