likes
comments
collection
share

你也可以手敲一个高速下载器(三)

作者站长头像
站长
· 阅读数 22

你也可以手敲一个高速下载器(三)日志和数据类

前言

上一篇讲了错误异常的重试,这节来说说日志相关的,还有@dataclass相关的东西。

日志

一个成熟的项目中,完善的日志输出是必不可少的,大部分的情况下,我们可以选择使用官方的日志库:loggig,也是很好用的,但官方的库配置起来非常的复杂,要经过完善的配置才能在我们的项目的去使用。所以在这个我选择的是一个第三方开箱即用的一个库:loguru,鉴于本人不想水文~~(其实就是懒)~~,直接附上一个官方的图,自己看着了解吧

你也可以手敲一个高速下载器(三)

配置日志级别

通过上图,我想大家也应该清楚了这个库的基本用法和优点,就是方便快捷,看着也好看。大家也发现了,在使用的时候是可以输出日志级别的,比如:INFO级别和DEBUG级别,在真实项目中,DEBUG级别的日志内容会输出的特别详细,INFO级别则是记录一些主要的内容,通过设置去调整。但我们发现在直接使用的时候是无法调整级别的,需要配置才可以:

logger.remove()
logger.add(sys.stderr, level=self._setting.log_Level)

第一行是删除默认是日志,如果不删除的话会重复输出日志,第二个是添加一个新的日志,并且根据需要设置日志级别

学习文档

因为本篇文章并不是专门介绍设置库的,也就没有写的过于详细,也不想写的过于详细,因为很多介绍库的文章比我写的更好,更详细,直接去看就好了。我呢,只是让大家只是有这么个东西,并且挺好用的就可以了。

dataclass

这个是python官方的一个库,作用是根据类的成员变量自动生成__init__方法,可以在初始化的时候直接使用,下面用实例来说明:

class User(object):
    uid: int = 0
    name: str = ""
    age: int = 0
    
    def __iniit__(self, uid, name, age):
        self.uid = uid
        self.name = name
        self.age = age

上面是很正常的一种写法,就是定义一些成员变量,然后在__init__方法中传递参数进行赋值,但如果变量特别多呢,这种写法就很繁琐了,这时就可以用到dataclass,使用这个,就可以不用手写初始化方法了,会默认把所有的成员变量都写__init__参数中,常常和field相配合使用,下面用代码说明:

from dataclasses import field, dataclass
from typing import Union, Dict


@dataclass
class Setting:
    proxies: Union[Dict, str] = field(default=None, init=False)
    retrys_count: int = field(default=10)
    retries_delay: int = field(default_factory=int)
    allow_codes: list = field(default_factory=list)

可以看到上面定义了四个成员变量,其中proxies设置了默认值为空,并且init设置为False,说明不会在__init__方法中出现这个参数,retrys_count则直接设置默认值为10,后面两个是使用了default_factory来设置默认值的,他会根据数据类型自动设置对应的默认值,比如int默认值0,str的默认值就是""

相关资料

直接去看官方文档吧,很全。

官方文档: docs.python.org/zh-cn/3/lib…

结语

这节介绍了这个项目会用的日志库:loguru,和数据类:dataclass,但也只是介绍了一下,大家自己下去慢慢了解。好,先这样,下节更精彩