/images/hugo/avatar.png

02 装饰器与描述符协议

上一篇文章说明了普通函数实现的装饰器存在的问题。本文我们将着眼于之前阐述的最后一个问题,如何将装饰器应用到一个描述符上。

1. 描述符协议

有关 Python 的对象模型和底层设计原理推荐大家读一读《流畅的Python》,这里不会详细解释描述符是什么以及他们的工作原理。简而言之,描述符就是存在绑定行文的对象,即属性访问会被描述符协议实现的方法所覆盖。实现描述符协议的特殊方法包括 __get__(), __set__(), 和 __delete__()。如果任意一中方法在一个对象中被定义,就可以说该对象是一个描述符**

01 如何实现一个 Python 装饰器

稍微对 Python 有所了解的程序员一定知道 Python 装饰器和函数闭包。我曾经也以为很了解,直到在《流畅的Python》中看到了 Wrapt 模块。

Wrapt 模块的作者 Graham Dumpleton 先生写了 14 篇博客详细讲解了如何在 Python 中实现一个能同时包装函数,类方法,实例方法的通用装饰器。本文以及接下来几篇文章是我对那 14 篇博客的整理和笔记。

22.3 sudo

sudo

/images/linux_mt/linux_level2.jpg

sudo是linux系统管理指令,它允许用户临时以其他用户(通常是root)执行一些或全部指令,其实现的是一种授权机制。普通用户想执行root 用户的特权命令时,可以使用 su 切换到管理员,但是这样做有两个坏处,一是 root 用户会被普通用户知道,二是普通用户切换为 root 后获取的是 root 的所有权限,这些都存在安全风险。而 sudo 可以实现授权普通用户执行部分或全部命令,同时无需 root 密码。本节我们就来介绍 sudo 的使用,内容如下:

22.2 日志管理系统rsyslog

日志管理系统rsyslog

/images/linux_mt/linux_level2.jpg

rsyslog 是Linux 系统上日志管理系统,应用程序可直接调用 rsyslog 的接口将日志写入到 rsyslog 特定的 facility 中即可完成日志记录。如果应用程序通过 rsyslog 来记录日志,通常在其自己的配置文件中有专门的选项用来定义将日志存入到 rsyslog 哪个 facility。facility 可以理解为 rsyslog 日志收集器的基本单元,rsyslog 内部的配置文件定义了每个 facility 的日志存储于何处。应用程序只需要将日志信息教给 rsyslog,rsyslog 会自动根据日志所属的 facility 将日志存储到对应的位置。本节我们就来详细介绍 rsyslog 的配置使用

22.1 Linux时间服务-chrony

Linux时间服务-chrony

/images/linux_mt/linux_level2.jpg

Linux 中有一些通用原则,比如如果上下层衔接不通畅,通常的解决方法就是添加一个中间层,虚拟文件系统就是最典型的一例,再比如如果一个功能被很多应用所需要,通常会做成一个公共服务以便,认证功能 pam 还有本节将要介绍的 日志服务 rsyslog 就是典型的示例。本章我们会讲一些类似这些的 Linux 中基础的但是并不复杂的基础服务,包括:

21.7 网络接口类型

网络接口类型

/images/linux_mt/linux_iptables.jpg

网络虚拟化我们会在之后的高级篇详细讲解,但是为了方便大家理解,我们在此章节简单描述以下不同虚拟网卡的类型的作用范围。虚拟网卡分为四种主要类型: