标签:
编程方式:
为嘛要面向对象
while True:
if cpu利用率 > 90%:
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接
if 硬盘使用空间 > 90%:
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接
if 内存占用 > 80%:
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接
随着python的学习,开始使用函数式编程
def 发送邮件(内容)
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接
while True:
if cpu利用率 > 90%:
发送邮件('CPU报警')
if 硬盘使用空间 > 90%:
发送邮件('硬盘报警')
if 内存占用 > 80%:
发送邮件('内存报警')
函数式编程增加了代码的可读性和重用性,但是,这仅仅是单台机器的监控,如果我要监控多台呢,可能需要需要这样写:
def 发送邮件(内容)
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接
while True:
for host in host-list: #通过遍历host列表来进行监控
if cpu利用率 > 90%:
发送邮件('CPU报警')
if 硬盘使用空间 > 90%:
发送邮件('硬盘报警')
if 内存占用 > 80%:
发送邮件('内存报警')
这样貌似实现了,但是如果是1000台机器呢,可能当循环到999台的时候,第100台已经出现问题了。造成告警延误。而如果使用面向对象呢?将很好的解决此问题
class host:
def 发送邮件(内容)
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接
def judge(self):
while True:
if cpu利用率 > 90%:
发送邮件('CPU报警')
if 硬盘使用空间 > 90%:
发送邮件('硬盘报警')
if 内存占用 > 80%:
发送邮件('内存报警')
我将每个机器创建为一个对象,对象中有上面判断的方法,这样我就可以多线程的监控
类和对象
类就是一个模板,模板里可以包含多个方法(即函数),方法里实现一些功能,对象则是根据模板创建的实例,通过实例对象可以执行类中的函数
#创建类 class+类名
class foo: #class是关键字,表示类,foo是类的名字
def f1(self): #类的方法1
pass
def f2(self): #类的方法2
pass
#创建对象 对象 = 类名()
bar = foo() #创建一个bar对象 ,此对象中有类中所有的方法 ,创建对象,类名称后加括号即可
#调用对象的方法 对象.方法名()
bar.f1()
bar.f2()
#创建类
class SQL:
def create(self,sql):
print(sql)
def modify(self, sql):
print(sql)
def remove(self,sql):
print(sql)
def fetch(self,sql):
print(sql)
#创建对象
obj1 = SQL()
obj2 =SQL()
#调用对象里的方法
res1 = obj1.modify('修改')
res2 = obj2.fetch('查看')
print('obj1:'res1)
print('obj2:'res2)
运行结果:
obj1: 修改
obj2: 查看
应用场景
类中的self是什么鬼
self是python自动传值的一个形式参数,那个对象调用方法,就会自动执行self,在一个类中,self就是对象本身
还用上面的例子,如果我需要在执行方法的时候,验证用户名、密码传,验证通过之后才能执行里面的方法
class SQL:
def create(self,sql):
print(sql)
def modify(self, sql):
print(sql)
def remove(self,sql):
print(sql)
def fetch(self,sql):
print(sql)
#创建对象
obj1 = SQL()
obj1.user = 'user'
obj1.password = 'password'
res1 = obj1.modify('修改')
obj1 =SQL()
obj1.user = 'user'
obj1.password = 'password'
res2 = obj2.fetch('查看')
发现每次对象调用方法都要进行对user 和password进行赋值。非常麻烦。下面用待了类的init方法,创建对象的时候自动执行该方法
class SQL:
def __init__(self,user,password):
self.user = user
self.password = password
def create(self,sql):
print(sql)
def modify(self, sql):
print(sql)
def remove(self,sql):
print(sql)
def fetch(self,sql):
print(sql)
obj = SQL('username','password')
标签:
原文地址:http://www.cnblogs.com/pycode/p/class.html