热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pythonhook函数_python2中的类方法hookdecorator

多亏了martijnpieters,我像这样重写了它(在python2.7中工作得很好):def_add_hook_for(cls,target):de

多亏了@martijn pieters,我像这样重写了它(在python2.7中工作得很好):def _add_hook_for(cls, target):

def hook_decorator(hook):

def hooked(s, *p, **k):

ret = target(s, *p, **k)

# some magic happens here

print(hook(s, target.__name__, *p, **k))

return ret

setattr(cls, target.__name__, hooked)

return hook

return hook_decorator

def reporting_list_deco(cls):

@_add_hook_for(cls, cls.append)

@_add_hook_for(cls, cls.extend)

@_add_hook_for(cls, cls.sort)

@_add_hook_for(cls, cls.reverse)

def no_idx_info(s, op, *p, **k):

return '%s %s' % (op, s._name)

@_add_hook_for(cls, cls.__setitem__)

@_add_hook_for(cls, cls.insert)

@_add_hook_for(cls, cls.__delitem__)

@_add_hook_for(cls, cls.remove)

@_add_hook_for(cls, cls.pop)

def idx_info(s, op, idx='', *p, **k):

return '%s %s[%s]' % (op, s._name, idx)

return cls

def test_reporting_list():

@reporting_list_deco

class reporting_list(list):

def __init__(self, name, *p, **k):

super(reporting_list, self).__init__(*p, **k)

self._name = name

rl = reporting_list('foo', [61,62,63])

rl[1] = 1

rl.append(7)

rl.remove(1)

rl.extend([5,6,7])

rl.pop()

rl.pop(2)

rl.sort()

del rl[0]

rl.reverse()

print(rl)

输出:

^{pr2}$

它也可以应用于口述。谢谢你马蒂金!在



推荐阅读
  • 自定义RecyclerView添加EmptyView
    你知道RecyclerView里没有Em ... [详细]
  • rtemsapi用户指南Elixir代表了相对较新的编程语言,面向更广泛的受众。它于2011年发布,此后一直在开发中。他的主要特征是取消功能范式 ... [详细]
  • 找出字符串中重复字符
    2019独角兽企业重金招聘Python工程师标准packagejavaBasic;importjava.util.HashMap;importjava.util.Map; ... [详细]
  • 我正在使用数组列表通过构建一个交互式菜单供用户选择来存储来自用户输入的值。到目前为止,我的两个选择是为用户提供向列表输入数据和读取列表的全部内容。到目前为止,我创建的代码由两个类组成。 ... [详细]
  • C模板实现的单向链表,实现了链表的初始化创建,元素插入,元素链表末尾添加,元素删除,链表清空Lists.h# ... [详细]
  • mysql oneproxy稳定吗_Mysql 中间件 oneProxy总结
    建议使用之前把官方的文档全部通读一遍这里提供一个我的网盘地址oneproxy百度网盘0.先对oneproxy有个大概的了解,知道他所处的位置1.MySQL服务器创建t ... [详细]
  • 在实际开发中,现在安卓端和后台之间的数据交互,一般都是用JSON来传递数据信息。JSON大家一般都比较熟悉。我这边就以实际项目中的后台传过来的情况和大家分析下及如何处理。比如后台返 ... [详细]
  • 小编给大家分享一下python怎么获取引用对象的个数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有 ... [详细]
  • UNP总结 Chapter 12~14 IPv4与IPv6的互操作性、守护进程和inet超级服务器、高级I/O函数
    一、IPv4与IPv6的互操作性1.IPv4客户与IPv6服务器拥有双重协议栈的主机的一个基本特性就是:其上运行的IPv6服务器既能应付IPv4客户,又能应付IPv6客户。这是通过使用IPv4映射 ... [详细]
  • 这篇文章将为大家详细讲解有关C#开发技巧有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。C#开发技 ... [详细]
  • java中如何对汉字进行排序?
    前言:上一篇文章我们讲解了java中实现Comparator进行排序和实现Comparable进行排序,我们分别举例根据学号和姓名降序排序, ... [详细]
  • Gson转换json数据为对象
    可以通过Gson使用两种方法,将json字符串转换为对象,以下面该段报文做测试{id:84041462,lastName:小华,age:32 ... [详细]
  • PIMPL 是 C++ 中的一个编程技巧,意思为指向实现的指针。具体操作是把类的实现细节放到一个单独的类中,并用一个指针进行访问 ... [详细]
  • Mysql MySqlBulkLoader在.NET平台下的批量插入
    批量导入publicboolTranBatchImpo ... [详细]
  • 一、使用ContentProvider(内容提供者)共享数据ContentProvider在android中的作用是对外共享数据,也就是说 ... [详细]
author-avatar
kaining_huang_750
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有