python面向对象基础
Posted FuZZ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python面向对象基础相关的知识,希望对你有一定的参考价值。
面向对象基础
1. 简述
编程方式:
- 面向过程: 根据代码在脚本的堆叠顺序,从上到下依次执行
- 函数式编程:将相同功能的代码封装到函数中,直接调用即可,减少代码重复性
- 面向对象:对函数进行分类和封装,将同类的函数放到一个类中,使调用更简单
为嘛要面向对象
- 应用需求 要的对系统的cpu、内存、硬盘等进行监控,超过阈值则告警
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%:
发送邮件('内存报警')
我将每个机器创建为一个对象,对象中有上面判断的方法,这样我就可以多线程的监控
2. 面向对象
类和对象
类就是一个模板,模板里可以包含多个方法(即函数),方法里实现一些功能,对象则是根据模板创建的实例,通过实例对象可以执行类中的函数- 创建类和对象
#创建类 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')
以上是关于python面向对象基础的主要内容,如果未能解决你的问题,请参考以下文章