上一页 1 2 3 4 5 6 ··· 9 下一页
摘要: 编写一个包装函数的装饰器函数,但具有用户可调整的属性,这些属性可用于在运行时控制装饰器的行为。 示例如下: 阅读全文
posted @ 2020-02-03 17:45 Jeffrey_Yang 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 还是直接给出示例,然后再分析: 乍一看,该实现看起来很棘手,但想法相对简单。 最外层的函数logging()接受所需的参数,并使它们可用于装饰器的内部函数。 内部函数decorate()接受一个函数,并像往常一样在其周围放置包装。 关键部分是允许包装器使用传递给Logged()的参数。 装饰器接收参 阅读全文
posted @ 2020-02-03 16:05 Jeffrey_Yang 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 示例 直接给出示例,普通装饰器(即装饰器函数本身不带参数,或参数为实际被包裹的函数): import time from functools import wraps def timethis(func): ''' Decorator that reports the execution time. 阅读全文
posted @ 2020-02-03 15:52 Jeffrey_Yang 阅读(509) 评论(0) 推荐(0) 编辑
摘要: Python的基础数据类型大多支持比较操作,如 =, ==, =运算符,请在类中定义__ge __()方法。 尽管定义单个方法通常没有问题,但是创建每个可能的比较运算符的实现很快变得很繁琐。 Python模块functools提供了total_ordering类装饰器方法,可用于简化此过程。 要使用 阅读全文
posted @ 2020-01-27 14:18 Jeffrey_Yang 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 调用对象的方法,一般分为两步,首先查找对象的属性中是否包含该方法名称,然后是调用函数。 对于简单的情形,可以使用getattr(),如下: 另一个方案是使用operator模块的methodcaller()函数,如下: 如果要按名称查找方法并一次又一次地提供相同的参数,operator.method 阅读全文
posted @ 2020-01-06 23:08 Jeffrey_Yang 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 想实现一个状态机或可以在许多不同状态下运行的对象,但又不想在代码中添加很多条件。 一般通过添加不同状态符号来运行不同状态下的代码,如下: 该实现存在两个困难。 首先,由于引入了许多状态条件检查,因此代码变得很复杂。 其次,由于通用操作(例如read()和write())总是在进行操作之前检查状态,因 阅读全文
posted @ 2020-01-05 14:54 Jeffrey_Yang 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 说到Python中的类构造函数,一般是实现类的__init__方法,用以实例初始化(__new__用作创建实例)。 但Python不像Java有很显示的方法重载。因此,若要实现多个不同的构造函数,可能需要另辟蹊径。 一个方案是使用类方法classmethod,如下: 如果不实用classmethod 阅读全文
posted @ 2020-01-02 23:27 Jeffrey_Yang 阅读(1675) 评论(0) 推荐(0) 编辑
摘要: 代理属性访问通常作为类继承的一种替代,最简单的代理属性访问代码如下: 如果只有几个方法需要代理,可以实现类的__getattr__方法,如下: 另一个示例: 常见的约定是,代理只能委派不以下划线开头的属性(即代理仅公开所保留实例的“公共”属性)。 同样重要的是要强调__getattr __()方法通 阅读全文
posted @ 2020-01-02 22:41 Jeffrey_Yang 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 想要实现一个自定义类,该类模仿普通的内置容器类型(例如list或dict)的行为。 但是,不确定要实现哪种方法。 collections.abc模块定义了各种抽象基类,这些基类在实现自定义容器类时非常有用。自定义类一般通过继承该模块的对应基类,然后实现所需要的类方法。如下: 简单的继承基类却不实现基 阅读全文
posted @ 2020-01-01 23:45 Jeffrey_Yang 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 想定义各种类型的数据结构,但是要对允许分配给某些属性的值实施约束。在此问题中,基本上要面对某些实例属性的设置进行检查或声明。 为此,需要基于每个属性自定义属性的设置,此时应该使用描述符。一般通过类及类的继承系统来实现,如下示例: 另一种实现方式是使用类装饰器,如下: 第三种方式是使用元类,如下: 本 阅读全文
posted @ 2019-12-29 23:36 Jeffrey_Yang 阅读(207) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 9 下一页