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面向对象基础的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程

python基础之面向对象

python——面向对象基础

Python面向对象基础

Python面向对象基础