当前位置: 首页 > wzjs >正文

网站建设委托外包协议海淀seo搜索引擎优化公司

网站建设委托外包协议,海淀seo搜索引擎优化公司,北京建网站的公司哪个比较好,石材企业网站源码分类目录:《系统学习Python》总目录 我们在前面的文章中编写了第一个基于类的tracer函数装饰器的时候,我们简单地假设它也应该适用于任何方法一一一被装饰的方法应该同样地工作,并且自带的self实例参数应该直接包含在*args的前面。但这一假设…

分类目录:《系统学习Python》总目录


我们在前面的文章中编写了第一个基于类的tracer函数装饰器的时候,我们简单地假设它也应该适用于任何方法一一一被装饰的方法应该同样地工作,并且自带的self实例参数应该直接包含在*args的前面。但这一假设唯一的实际缺点就是它彻头彻尾地错了!当应用于类方法的时候,tracer的第一个版本失效了,因为self是装饰器类的实例,并且被装饰的主体类的实例没有包含在*args中。在python3.X和Python2.X中都是如此。

现在,我们可以在实际工作代码的上下文中看到这点。假设基于类的跟踪装饰器如下:

class tracer:def __init__(self, func):self.calls = 0self.func = funcdef __call(self, *args, **kwargs):self.calls += 1print('call %s to %s' % (self.calls, self.func.__name__))return self.func(*args, **kwargs)@tracer
def spam(a, b, c):print(a + b + c)

我们可以得到如下输出:
输出结果
然而,类级别方法的装饰失效了:

class Person:def __init__(self, name, pay):self.name = nameself.pay = pay@tracerdef giveRaise(self, percent):self.pay *= (1.0 + percent)@tracerdef lastName(self):return self.name.split()[-1]

我们可以得到如下输出:
输出结果
这里问题的根源在于tracer类的__call__方法的self参数是一个tracer实例,还是一个Person实例?其实我们两者都需要:tracer用于记录装饰器状态,Person用于指向最初的方法。实际上,self必须是tracer对象,以提供对tracer的状态信息(它的callsfunc)的访问;不管装饰一个简单函数还是装饰一个方法,都是如此。

遗憾的是,当我们用__call__把被装饰方法名称重绑定到一个类实例对象的时候,Python只向self传递了tracer实例;它根本没有在参数列表中传递Person主体。此外,由于tracer不知道我们要利用方法调用处理的Person`实例的任何信息,因此没有办法创建一个带有实例的绑定方法,也没有办法正确地分发调用。这不是一个漏洞,但却是一个非常值得注意的细节。

最后,前面的列表最终传递了太少的参数给被装饰的方法,并且导致了一个错误。在装饰器的__call__方法添加一行,以打印所有的参数来验证这一点一一正如我们所看到的,self是一个tracer实例,而Person实例则完全缺失:
输出结果
正如前面提到的,出现这种情况是因为仅当一个方法名绑定到一个简单函数时,Python才向self传递隐含的主体实例;当它是可调用类的实例时,就向self传递这个类的实例。从技术上讲,仅当方法是一个简单函数,而不是另一个类的可调用实例的时候,Python才会创建一个绑定的方法对象,其中包含了主体实例。

参考文献:
[1] Mark Lutz. Python学习手册[M]. 机械工业出版社, 2018.

http://www.dtcms.com/wzjs/266057.html

相关文章:

  • 常州网站建设公司效果小程序商城制作一个需要多少钱
  • 电子商城网站开发合同启信聚客通网络营销策划
  • 张家口网站建设江北seo
  • 建设网站好处如何做网络推广
  • 郴州市网站建设友链交换网站源码
  • 余姚物流做网站下载百度app最新版到桌面
  • 广州网站建设外包公司福清市百度seo
  • 一二三类医疗器械目录seo网站诊断
  • 济南网站建设jnjy8百度竞价点击神器奔奔
  • 电商平台建设做网站谷歌官网
  • fullpage.js wordpress优化推广网站推荐
  • 龙岗平湖网站建设公司竞价外包推广专业公司
  • 免费网站下载直播软件大全苏州网站排名推广
  • 网站制作二级网页怎么做秦洁婷seo博客
  • 网站开发 模块化2023新闻大事件摘抄
  • 长沙做网站建设价格游戏代理是怎么赚钱的如何代理游戏
  • 网站改版不更换域名 .net怎么做301网站重定向50个市场营销经典案例
  • 武汉做网站hlbzx外贸网络推广怎么做
  • 校园网站建设方案新闻发稿发布平台
  • 漯河做网站哪家好网站点击量与排名
  • 电商网站建设目标分析的方法推广公司是做什么的
  • 苏州网站建设推广咨询平台百度正式员工工资待遇
  • 企业建网站服务网络广告策划方案范文
  • 做网站去哪找源码百度搜索资源平台官网
  • 松江做网站费用武汉seo优化排名公司
  • 网站怎么做微信推广潍坊网站建设seo
  • 河北邢台做wap网站郑州seo优化推广
  • 亚马逊网站建设评述百度指数app官方下载
  • 嘉兴建设教育网站培训中心网站公司网站设计制作
  • 郑州官网网站优化公司合肥seo优化排名公司