从脚本编写到面向对象的 Python 编程
2008-09-23 12:46:56 来源:WEB开发网此输出与前面带标记的版本区别非常大,因为它只是使用顶部注入的 print 语句来打印的未经筛选的 df –h 命令结果。通过重写 MyDiskMonitor 类中的方法,您能够完全改变 disk_space 方法的意图。
允许您重用其他类中的属性的 Python 魔法是这个“MyDiskMonitor(DiskMonitor)”语句。您只需在定义新类的名称时,将先前的类的名称放在括号内。一旦完成此步骤,您立即可以访问其他类属性来做自己希望的事情。但是乐趣不仅于此。通过添加另一个通过电子邮件来发送标记消息的方法,也许是将其命名为 disk_alert(self),这样就可以进一步自定义新类。这是面向对象的设计的美妙之处;它允许有经验的开发人员不断重用已编写的代码,从而节省大量的时间。
遗憾的是,面向对象的编程也有其不利的一面。所有这些抽象都是以复杂性为代价的,如果抽象过度,可能会彻底地弄巧成拙。由于 Python 支持多重继承,抽象可以达到相当有害的复杂程度。您是否能够想象只是为了编写一个方法也要查看多个文件的情况?无论相信与否,这种情况的确会发生,并且代表了面向对象编程的不幸现实。
面向对象的编程的替代方案是函数式编程,并且 Python 提供了用于进行函数式以及面向对象和过程式编程的资源。在最后一个示例中,我们将研究如何以函数式的方式编写现已变得非常无聊的磁盘监视代码。
函数式的 Python 磁盘监视脚本
from subprocess import Popen, PIPE
import re
def disk_space(pattern="2[0-9]%", message="CAPACITY WARNING:"):
#Generator Pipeline To Search For Critical Items
ps = Popen("df -h", shell=True,stdout=PIPE, stderr=PIPE)
outline = (line.split() for line in ps.stdout)
flag = (" ".join(row) for row in outline if re.search(pattern, row[-2]))
for line in flag:
print "%s %s" % (message,line)
disk_space()
- ››编写Linux定时处理程序
- ››面向对象的JS-私有成员变量实现方式
- ››编写Linux系统下Daemon程序的方法步骤
- ››编写组件,使用JavaScript更新UpdatePanel
- ››面向对象的JavaScript (一、对象基础,使用函数来...
- ››编写多文档应用程序
- ››面向对象数据库 db4o 之旅,第 4 部分: 使用 dRS
- ››编写自定义的 Android Preference 组件
- ››编写高效的Android代码
- ››编写 Android第一个程序 Hello, Android!
- ››编写使用root权限的android应用程序
- ››面向 Java Web 应用程序的 OpenID,第 2 部分: 为...
更多精彩
赞助商链接