6.18 logging模块,面向对象等

一.logging模块

   定义:Python 的 logging 模块是一个灵活的日志记录系统,它允许应用程序通过不同的日志级     别记录消息,并将这些消息输出到各种目的地,例如控制台、文件或通过网络发送。以下是一些  基本的 logging 模块用法

  1. 导入模块:

    import logging

  2. 配置日志: 使用

     logging.basicConfig()

     方法可以快速设置日志的基本配置,包括日志级别、日志文件名、日志格式等。

  3.  
    logging.basicConfig(level=logging.DEBUG, 
    format='%(asctime)s - %(levelname)s - %(message)s')

  4. 设置日志级别: 日志级别从低到高分为:DEBUG, INFO, WARNING, ERROR,CRITICAL

     
    logging.debug("这是一个 debug 级别的日志") 
    logging.info("这是一个 info 级别的日志") 
    logging.warning("这是一个 warning 级别的日志") 
    logging.error("这是一个 error 级别的日志") 
    logging.critical("这是一个 critical 级别的日志")

  5. 创建日志记录器: 可以创建自己的日志记录器,用于不同模块或部分的日志记录。

     
    logger = logging.getLogger('my_logger')
    handler = logging.FileHandler('my_log.log')
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    logger.setLevel(logging.DEBUG)
    logger.debug("这是自定义记录器的 debug 日志")

  6. 日志处理器: 日志处理器(Handlers)负责将日志消息发送到不同的目的地,如文件、网络等。

  7. 日志过滤器: 可以添加过滤器来进一步控制日志消息的输出。

  8. 日志格式化: 可以自定义日志的格式,包括时间戳、日志级别、消息等。

  9. 日志旋转: 可以使用 RotatingFileHandlerTimedRotatingFileHandler 来自动旋转日志文件,避免单个日志文件过大。

  10. 网络日志: 可以使用 SocketHandlerHTTPHandler 将日志发送到远程服务器。

  11. 配置文件: 可以使用配置文件来设置日志系统,例如使用 JSON 或 INI 格式的文件。

使用 logging 模块可以帮助你更好地管理和记录应用程序的运行情况,对于调试和生产环境中的问题排查都非常有用。

二。4位验证码

 import random

 code = ''
 for i in range(4):
    cur = random.randrange(0,4)
     if cur != i:
         temp = chr(random.randint(65,90))  # chr函数主要用来表示ascii码对应的字符,会把整数转换成字符  
    else:
        temp = random.randint(0,9)
     code += str(temp)
 print( code)

三.加密模块

hashlib 加密模块

(1)用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
SHA1的结果是160 bit字节,通常用一个40位的16进制字符串表示。
比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法越慢,而且摘要长度更长。

(2)    引用过程:

import hashlib

md5 = hashlib.md5("你好".encode("utf-8"))   #实例化 把类的功能赋值给变量
print(md5.hexdigest())
md5.update('世界'.encode("utf-8"))
print(md5.hexdigest())

import hashlib
# sha 256算法
h = hashlib.sha256()
# 要计算的元数据必须是字符串格式
# 字符串对象需要encode转换为字节串对象
h.update("你好".encode())

# 产生哈希值对应的bytes对象
resultBytes = h.digest()
resultHex = h.hexdigest()
print(resultHex)

3.模块的安装:

pip install 模块名

四. 面向对象编程

1.定义:Python全面采用了面向对象的思想,是真正的面向对象的编程语言.一切皆为对象 OOP(Object oriented programming)面向对象,一种针对大型软件程序的编程思

  • 2.特点
    • 扩展性强,可读性好
    • 使编程就和堆积木一样
    • 将数据(属性)和操作方法(函数)全部封装到对象中
    • 组织代码的方式更加接近人的思维

(1)面向对象与面向过程

  • 区别

    四.面向对象三要素

    1.封装

    四.

    面向对象的三要素

    1.封装

    • 面向过程思维
      • "执行者"思维,适合编写小规模程序
      • 我们首先思考"按照什么步骤"实现,一步一步最终完成,适合一些简单的事情,不需要协作关注"程序的逻辑流程"
      • 例如:
      • 开车 (发动车->挂挡->踩油门->走喽)
      • 做饭 (买菜->洗菜->切菜->开火炒菜->开饭了)
         
    • 面向对象思维
    • "设计者"思维,适合编写大型程序
    • 更加关注"对象之间的关系"
    • 我们首先思考"怎么设计这个东西"
    • 然后通过分工协作来完成,每个类完成一个部分
    • 例如造车\飞机\轮船\火箭,我们必须先要确定这些复杂的设备是由什么构成的。
    • 我们把这个东西拆分成一个个的物体object(对象)

2.两者的相同点

  • 都是解决问题的思维方式
  • 都是代码的组织方式
  • 人天然就有的能力

面向对象:

1.组装:将数据和操作组装到一起。将和对象的属性和操作这些属性的方法放入到同一个类中。

隐藏数据:对象只暴露一些接口,通过接口访问对象。例如:汽车驾驶员通过方向盘、油门、刹车、挂挡来操作汽车,可以不需要了解汽车的机动原理。

  • 2.继承
  • 子类继承父类之后,子类自动拥有类父类的所有公开的属性和方法。
  • 多复用,继承来就不需要自己写了。
  • 多继承少修改,OCP原则(OCP 原则就是 " 开- 闭原则 " ,一个软件应该对扩展开放,对修改关闭),使用继承改变,体现个性。(你定义好一个这个副类,副类里定义好对所有类的这个处理方案,然后呢,之后你需要添加新的功能,新的网站,你只要加新的。子类,去继承这个子类就可以了,那这样儿的话你就可以无限扩展,比如说爬虫儿的话,就是你写好之后就可以无限添加新的网站的抓取,就只要加新的类就可以了。)
  • 多态
  • Python崇尚鸭子类型实现多态,一个动物,走起路来像鸭子,叫声也像鸭子,那么我们就认为它是鸭子。(不同的类中,使用相同的方法命名类似的功能。)
  • 面向对象编程最灵活的地方,动态绑定 (把一个方法或者属性和类或者对象关联起来,被称为绑定 。
  • 静态绑定:在程序运行前写好的属性和方法。动态绑定:在程序运行后添加的属性和方法 )

实现接口

•json dump() load() dumps() loads()
•pickle dump() load() dumps() loads()

类的定义

类是对象的模板(描述),类是一类特殊的对象。

  • 类定义完成后,就产生了一个类对象,绑定到了ClassName上了。

  • class MyClass:
        
     x = "abc"  # 类属性
    
        def foo(self):  # 类属性foo,也是方法
            return "My Class"
        
    print(MyClass.x)
    print(MyClass.foo)
    print(MyClass.__doc__)
    class Student(object):
        # __init__是一个特殊方法用于在创建对象时进行初始化操作
        # 通过这个方法我们可以为学生对象绑定name和age两个属性
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def study(self, course_name):
            print(f'{self.name}正在学习{course_name}.')
    
        # PEP 8要求标识符的名字用全小写多个单词用下划线连接
        # 但是部分程序员和公司更倾向于使用驼峰命名法(驼峰标识)
        def watch_movie(self):
            if self.age < 18:
                print(f'{self.name}只能观看《熊出没》.')
            else:
                print(f'{self.name}正在观看XXX电影.')
                
    def main():
        # 创建学生对象并指定姓名和年龄
        stu1 = Student('小明', 20)
        # 给对象发study消息
        stu1.study('Python程序设计')
        # 给对象发watch_av消息
        stu1.watch_movie()
        stu2 = Student('王', 15)
        stu2.study('思想品德')
        stu2.watch_movie()
    
    if __name__ == '__main__':
        main()            

    对象的属性和方法

  • self

      在类中定义的方法必须有个额外的第一个参数,就是self,表示创建的类实例本身
      属性就是在类中定义的变量

  • 实例属性
    • 从属于对象的属性也称实例变量
    • 一般在__init__()中定义
    • self.实例属性=初始化
    • 调用
    • 创建实例对象后
    • obj = 类名()
    • obj.实例属性=值
    • 类内部 self.实例属性名
  • 私有属性
    • 实现"封装",隐藏数据,只能在类的内部调用
    • 两个下滑线__开头的属性是私有属性(private),其他为公共属性(public).
    • 不是特别严格,主要靠自觉
  • 类属性特殊属性

    五.魔术方法

    • 属于类的属性,所有对象共享
    • 定义
    • 使用类名.类变量名来读写
      1. 创建函数__new__()用于创建对象,一般不需要我们自定义
      2. 构造函数__init__()对象的初始化,对象建立后,自动执行,初始化当前对象的相关属性,无返回值
      3. 析构函数__del__() 当类被销毁时,执行的操作。
      4. 回调函数__call__()表示对象可以和函数一样被调用
      5. 对象描述__str__(),__repr__()
      6. # __new__() 方法是在类准备将自身实例化时调用; 

def __new__(cls,*args,**kwargs):
    return object.__new__(cls)
# 对象建立后,自动执行,初始化当前对象的相关属性,无返回值
def __init__(self,参数列表):
	# 需要被初始化的属性或方法
	pass
# 析构函数
def __del__(self):
    pass
# 当类被销毁时,执行的操作
# 一般用来释放对象占用的资源
# 如打开的文件或链接的网络
# 一般不用自定义析构函数

  • 29
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值