zoukankan      html  css  js  c++  java
  • python面向编程: 常用模块补充与面向对象

    本文目录:

    一、常用模块

    二、面向对象总结

    一、常用模块

    1.模块 的用用法

        模块的相互导入
    
        绝对导入 从sys.path (项目根目录)开始的完整路径
        相对导入 是指相对于当前正在执行的文件开始的路径 只能用于包内模块相互间导入
        不能超过顶层包

    2.常用模块

            该用装饰器(如果你的日志没有什么特别的自定义消息 msg 仅仅是输出一些调试信息)
            还是直接调对应的
    
            周五的
            坑1  我们想使用不同配置  写了两个配置文件
            重新加载配置  调用getLogger(__file__)
            我们意淫 只要改了配置就能得到新的日志生成器
            其实 系统如果发现你需要的生成器以及被创建过 就不会再创建新的生成器
            我们在调用getLogger的时候 如果你要分别将日志输出到不同位置 应该创建两个不同的生成器
            而不是 去修改同一个的配置
    
            坑2
            需要将getLogger 返回的生成器 设置全局变量  否则只能输出一次
    
            使用logging的步骤
            1.编写配置文件
                格式可能需要修改
                handlers中  输出的位置需要修改
                loggers 中可能有不同的生成器
            2.加载配置  获取生成器 (一次即可)
            3.直接输出日志  info debug....
    logging模块
            标签格式
            <标签名 属性名="">文本</标签名>
            1.必须有且只能有一个根标签
            2.属性名不用双引号  而 值必须要
            3.双标签 必须有结束标签
            4.单标签格式:<标签名/>   只能有属性
    
            解析
            1.加载文件 t = xml.etree.ElementTree.parse(文件名)
            2.获取根标签 root = t.getroot()
            3.三种方式获取要的标签
                root.iter(标签名) 全文查找所有名称匹配的
                root.find(标签名) 在子级中查找第一个名称匹配的
                root.findall(标签名) 在子级中查找所有名称匹配的
            4.获取详细内容
                e = 一个标签
                e.text   获取文本
                e.tag        标签名
                e.attrib     属性字典
                e.get(属性名)    某个属性的值
    
            用代码生成xml 或修改 基本不用
            步骤  先创建新标签  设置相关的内容和属性   添加父标签中 写入文件
    xml模块
            json是跨平台的数据格式   全称js的对象表示方式
            书写格式 必须按照js要求的来
            js支持的类型
                {}
                []
                ""
                int/float
                true/flase
                null
    
            最外层通常是字典
            {"name":"矮根","gender":"male","age":68}
            key 必须双引号括起来  值如果是字符串也必须双引号
    
            读取(反序列化):
                json.load(文件对象)
                json.loads("字符串")
                返回python数据类型
    
            写入(序列化):
                json.dump(要序列化的对象,文件对象)
                json.dumps(要序列化的对象) 返回json字符串
            写web项目时  你要用python到数据库中拿数据  然后搞成json格式发给 前台
    json模块
      # 其他模块#shutil模块  高级的文件操作  压缩 复制 粘贴
        #os模块 操作系统相关 文件相关
            path 路径处理
        #sys模块
            解释器相关  sys.path  sys.modules
            编写命令行程序时 sys.argv获取参数
    
        #pickle python独有的序列化
        re
           正则表达式  对字符串进行 匹配(常用) 查找(常用) 替换操作
           位置匹配
           范围匹配
           单个字符
           精准匹配
           重复匹配 + * ? {a,b}
            贪婪匹配 尽可能多取  +1-无穷  *0-无穷
                        坑点  .任意非换行  .*这个表达式没有任何意义 所以返回结果如何 没必要看
            非贪婪匹配(常用) 尽可能少取   ? 0-1
                        表达式后面加上?  变为非贪婪
    
            分组   默认返回第0组 w+(s+)abc
                      findall 查找全文中所有匹配的内容 返回第1组
                      mathch  从开头开始匹配 用group指定要取的组号
                      search  查找全文中第一个匹配的内容
    
            项目中? 爬虫 用户输入验证
    
        #time
        #shevle python独有 轻量级序列号方式 相当于一个自带持久化效果的字典
    
        #random 随机数
        #hashlib hash算法    用于 加密  完整校验
        configparser
            解析配置文件
            xxx.xfg
                section
                option
            getoptions
            getsection
            set(section,option,value)
            removesection
            write(文件名)
        #subprocess
            子进程  当你的程序需要与系统的cmd交互时
            用管道来进行通讯    errout  stdout stdin

     

    二、面向对象总结

    面向对象
       面向过程的使用场景:一些对扩展性要求不高的程序系统内核,shell脚本
       面向对象的使用场景:常见的web开发 爬虫开发 数据分析等  对扩展性要求比较高
    
      类和对象
        对象是什么? 特征和技能的结合体 (万物皆对象)
        类是什么? 一系列具备相同特征和技能的对象的 抽象概念
    
        现实生活中  先有对象再有类
        程序中 先有类 再有对象
    
        使用OOP来编写程序时
        1.首先思考完成任务需要哪些对象参与
        2.在思考这些对象有什么要的特征和技能
        3.编写class
        4.按照需求 添加特征和行为
        5.实例化对象
        6.使用对象完成任务
    
      三大特征
        封装
            什么意思?  将内部复杂内容进行隐藏  只提供一个简单的使用接口
            本质上就是影藏一部分内容  使外界无法直接访问  只能通过提供的接口来访问
            为什么要封装
            对于开发者 作用对数据的访问加以限制 提高安全性
            对于使用者而言   简化了操作
    
            如何封装
            属性前签上__两个下划线
            pwd = 123
            __pwd = 123
    
            __的本质是 语法级别上变形(在语法检测期间)  _类名__属性名
            这么一来 我么完全可以绕过语法限制
    
        继承
            1.什么是继承
            继承与现实生活中的继承一个意思 例如  小明继承小明他爹财产  房子
            一个东西b继承了另一个东西a   b就拥有a的内容
            在代码中
            一个类b继承了另一个类a  b这个类 就拥有了a中所有属性
            作用:
                可以减少代码冗余
    
          2.使用场景:
          例如:  你的项目中需要两种对象 老师和学生
                 分析发现 老师和学生有很多相似之处  都有 姓名  性别 年龄
                 将相同的部分属性 抽取到一个共同父类中person
          3.写法:
          class Person:
                共有的属性
                name
                age
                gender
                def sleep():
                    print(大家都需要睡觉 睡觉的过程也相同)
    
                def attendClass():
                    print("听到上课铃声 要去教室")
    
          4.派生:
            分析:
            学生和老师 有相同的功能叫上课
            然而上课这个操作 学生和老师只有部分相同
            可以把相同的部分 抽取到父类中
            这样一来 学生就可以直接拥有父类中的上课方法  但是 实现方式与父类中有所不同
            此时我们可以直接覆盖父类中的函数  这样一来 学生类称之为person类的派生类
            总结:
            结合上课讲到的属性的派生,总的来说 只要子类中东西和父类不同 就成为派生类
          派生的案例:
          继承自Person
          class Student(Person):
                学号(子类特有的)
                # 上课
                def attendClass():
                    super().attendClass()
                    print("听课")
          继承自Person
          class Teacher(Person):
                工资(子类特有的)
    
                def attendClass():
                    super().attendClass()
                    print("讲课")
    
    
    
        5.super 是创建了一个特殊对象,专门用于访问父类提供的属性
            class Person:
    
                def __init__(self,name,age,gender):
                    self.name = name
                    self.age = age
                    self.gender = gender
    
            class Student(Person):
                # 学生有学号
                def __init__(self,name,age,gender,number):
    
                    # 1.指名道姓找到父类的函数
                    Person.__init__(self,name,age,gender)
                    # 2.创建特殊对象调用
                    super().__init__(name,age,gender)
                    self.number = number
    
        6.单继承和的多继承
        7.多继承中的查找顺序 mro
    
          python2中 需要手动指定Object作为父类 它就成为了新式类
          python3中 默认就继承Object 不需要手写
    
        多态
      组合
    
      装饰器:
      property
      classmethod
      staticmethod
    
      类内置方法
      __str__  打印对象时返回的字符串
      __del__  删除对象前执行 一些清理操作
    
      反射
      以字符串的方式 对对象中的属性进增删改查
  • 相关阅读:
    docker 知识汇总1-镜像管理
    合并两个git repository
    这一次, 信报箱震惊世界
    python实现括号分组
    linux case菜单代码示例
    oracle 11gR2 client安装(Red Hat Enterprise Linux Server release 5.5 (Tikanga) 安装ORACLE客户端)
    SYSAUX表空间过大处理
    SYSAUX表空间大于33G问题处理
    window 给链接加下划线或取消下划线
    ORACLE11G_win32监听程序不支持服务
  • 原文地址:https://www.cnblogs.com/wuzhengzheng/p/10268505.html
Copyright © 2011-2022 走看看