上一页 1 2 3 4 5 6 7 ··· 9 下一页
摘要: 有时候,我们会厌倦为无数的class编写__init__函数,而__init__函数的作用仅是为了初始化一些属性。 我们可以编写一个父类来约定子类的__init__方式,根据类属性列表来一一初始化。 如果要支持关键字参数的初始化形式,则需要做如下更改: 阅读全文
posted @ 2019-12-29 20:59 Jeffrey_Yang 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 在Python中,将方法变为属性使用@property的装饰器。有时候,为了提高性能,想在仅首次调用方法property时进行计算,后续则使用缓存的值。 此时,可以使用一个类装饰器,如下: class LazyProperty(object): def __init__(self, func): s 阅读全文
posted @ 2019-12-29 18:58 Jeffrey_Yang 阅读(291) 评论(0) 推荐(0) 编辑
摘要: 子类继承父类的时候,可以继承并重写父类的property,如下所示: 如果只想扩展property的某个方法,可以使用下面的代码: 或者扩展setter方法: 在子类中扩展属性会引入许多非常细微的问题,这些问题与以下事实有关:将属性定义为getter,setter和deleter方法的集合,而不是单 阅读全文
posted @ 2019-12-15 15:28 Jeffrey_Yang 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 非常牛的参考文章: "Python’s super() considered super" 介绍 众所周知,Python作为高级语言,既支持单继承,且支持多继承。在单继承中,如果子类想调用父类,可以使用super()。 官方解释:super()返回将方法调用委托给类型的父类或同级类的代理对象。 这对 阅读全文
posted @ 2019-12-13 16:16 Jeffrey_Yang 阅读(3131) 评论(0) 推荐(0) 编辑
摘要: 对实例属性的set或get进行额外的处理(例如,类型检查或验证)。 可以使用类property对属性进行set,get,delete的定制化。类签名如下: class property(fget=None, fset=None, fdel=None, doc=None) 返回一个property的属 阅读全文
posted @ 2019-12-08 16:43 Jeffrey_Yang 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 闭包函数(嵌套函数):通常想使用允许访问和修改内部变量的函数来扩展闭包。 通常,闭包的内部变量完全对外界隐藏。但是,可以通过编写访问器函数并将它们作为函数属性附加到闭包来提供访问。也即为闭包函数提供函数属性。如下: 总体来说,在需要执行诸如重置内部状态,刷新缓冲区,清除缓存或具有某种反馈机制之类的设 阅读全文
posted @ 2019-12-05 23:22 Jeffrey_Yang 阅读(560) 评论(0) 推荐(0) 编辑
摘要: 编码中常碰到的一个情形是需要编写回调函数,如事件处理函数等。一般的回调函数如常规函数,传递参数,返回计算的值。 注意到,print_result()函数仅接受一个参数,即result。 没有其他信息传递。当希望回调函数与环境的其他变量或部分交互时,信息的缺乏有时会带来问题。 在回调中携带额外状态或信 阅读全文
posted @ 2019-12-04 23:33 Jeffrey_Yang 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 默认参数值的陷阱 默认参数值在函数定义的时候并得到计算,如下: 最后输出的结果为5,因为默认值已在函数定义时得到计算。 重要警告 :默认值仅被计算一次。 当默认值是可变对象(例如列表,字典或大多数类的实例)时,这会有所不同。 例如,以下函数累积在后续调用中传递给它的参数: 这段代码将输出: 这是因为 阅读全文
posted @ 2019-11-29 00:07 Jeffrey_Yang 阅读(195) 评论(0) 推荐(0) 编辑
摘要: Python函数参数有三种格式,并且可以组合使用。 默认参数值 最常用的格式是给一个或多个参数名称添加默认值。如下所示: 特别的,当存在形式为\ \ name的最终形式参数时,它会收到一个字典,该字典包含除与形式参数相对应的所有关键词参数之外的所有关键词参数。 这可以与形式为\ name的形式参数组 阅读全文
posted @ 2019-11-28 22:26 Jeffrey_Yang 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 您有一个排序序列的集合,并且想要遍历所有合并在一起的排序序列。 先看如下示例,了解实际需求: 值得注意的是,heapq.merge要求所有的输入序列已排序。特别是,它不会首先将所有数据读入堆中或进行任何初步排序。 它也不对输入进行任何形式的验证,以检查输入是否满足排序要求。 取而代之的是,它仅从每个 阅读全文
posted @ 2019-11-09 16:28 Jeffrey_Yang 阅读(267) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 9 下一页