zoukankan      html  css  js  c++  java
  • 面向对象初识 logging旗舰版

    面向对象初识

    1.函数式编程 对 面向过程编程的两个特点

    1. 减少代码的重复性
    2. 增强代码的可读性

    2.面向对象编程 对 面向过程编程

    2.1 什么是面向对象

    ​ 面向对象的程序设计的核心是对象(上帝式思维),要理解对象为何物,必须把自己当成上帝,上帝眼里世间存在的万物皆为对象,不存在的也可以创造出来。

    2.2 什么是类,什么是对象

    ​ 类:就是具有相同属性和功能的一类事物。

    ​ 对象:就是类的具体表现。

    3.类的结构

    class Human:
        """
        此类主要是构建人类
        """
        mind = '有思想'  # 第一部分:静态属性 属性 静态变量 静态字段
        dic = {}
        l1 = []
        def work(self): # 第二部分:方法 函数 动态属性
            print('人类会工作')
    class 是关键字与def用法相同,定义一个类。
    Human是此类的类名,类名使用驼峰(CamelCase)命名风格,首字母大写,私有类可用一个下划线开头。
    类的结构从大方向来说就分为两部分:
    静态变量。
    动态方法。
    

    从类名的角度研究类

    class Human:
        """
        类的具体结构
        """
        # 第一部分:静态属性
        mind = '有思想'   # 类的属性  (静态属性, 静态字段)
        language = '使用语言'
        # 第二部分: 动态方法
        def work(self):
            print('人类都会工作')
        def eat(self):
            print('人类都需要吃饭')
    
    1. 类名操作类中的属性
        1. 类名查看类中所有的内容
    print(Human.__dict__)
        2. 类名操作类中的静态属性  万能的点.
    
    增:
    Human.body = '有头和四肢'
    删:
    del Human.mind
    改:
    Human.mind = 'liye脑残'
    查:
    print(Human.language)
    print(Human.__dict__)
    
    2. 类名调用类中的方法(一般类中的(静态方法,类方法)方法不会通过类名调用)
    Human.work(111)
    
    总结:
    一般类名就是操作类中的属性.
    

    从对象角度研究类

    class Human:
        """
        类的具体结构
        """
        # 第一部分:静态属性
        mind = '有思想'   # 类的属性  (静态属性, 静态字段)
        language = '使用语言'
        def __init__(self):
            # print(f'self---->: {self}')
            # print(666)
            self.name = '李业'
            self.age = 18
    
        # 第二部分: 动态方法
        def work(self):
            print('人类都会工作')
    
        def eat(self):
            print('人类都需要吃饭')
    
    obj = Human()  # 实例化过程
    得到一个返回值,这个返回值就是 对象,实例.
    print(f'obj---> {obj}')
    实例化一个对象发生了三件事:
    '''
        1. 开辟一个对象空间.
        2. 自动执行__init__方法,并且将对象地址传给self.
        3. 运行__init__方法内的代码,给对象空间封装属性.
    
    '''
    
    
    class Human:
        """
        类的具体结构
        """
        # 第一部分:静态属性
        mind = '有思想'   # 类的属性  (静态属性, 静态字段)
        language = '使用语言'
    
        def __init__(self, name, age):
            # print(f'self---->: {self}')
            # print(666)
            self.n = name
            self.a = age
    
    
        # 第二部分: 动态方法
        def work(self):
            # print(f'self---> {self}')
            print(f'{self.n}都会工作')
    
    
        def eat(self):
            print(f'{self.n}都需要吃饭')
    
    obj = Human('李业',18)  # 实例化过程
    print(obj.n)
    print(obj.a)
    print(obj.__dict__)
    

    对象操作对象空间的属性

    1. 对象查看对象的空间的所有属性

    obj = Human('李业',18)
    print(obj.__dict__)
    

    2. 对象操作对象空间的属性

    obj = Human('李业',18)
    增:
    obj.sex = 'laddy_boy'
    删:
    del obj.a
    改:
    obj.a = 1000
    查:
    print(obj.n)
    print(obj.__dict__)
    

    对象查看类中的属性

    obj = Human('李业',18)
    # print(obj.mind)
    obj.mind = '无脑的'
    print(obj.mind)
    print(Human.mind)
    

    对象调用类中的方法

    obj = Human('孙戴维', 23)
    # print(f'obj---> {obj}')
    obj.work()
    obj.eat()
    

    一个类可以实例化多个对象

    obj1 = Human('李业',18)
    obj2 = Human('小可爱', 16)
    obj3 = Human('怼姐', 18)
    
    变量,函数名:
    age_of_oldboy = 73
    Ageofoldboy
    

    logging旗舰版使用

    import logging.config
    # 定义三种日志输出格式 开始
    
    standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d][%(levelname)s][%(message)s]' #其中name为getlogger指定的名字
    
    simple_format = '在 %(asctime)s %(message)s'
    
    id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
    
    
    # log文件的全路径
    logfile_path = 'all2.log'
    
    # log配置字典
    LOGGING_DIC = {
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {
            'standard': {
                'format': standard_format
            },
            'simple': {
                'format': simple_format
            },
        },
        'filters': {},
        'handlers': {
            #打印到终端的日志
            'stream': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',  # 打印到屏幕
                'formatter': 'simple'
            },
            #打印到文件的日志,收集info及以上的日志
            'file': {
                'level': 'DEBUG',
                'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
                'formatter': 'standard',
                'filename': None,  # 日志文件
                'maxBytes': 1024*1024*1024,  # 日志大小 5M
                'backupCount': 5,
                'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
            },
        },
        'loggers': {
            #logging.getLogger(__name__)拿到的logger配置
            '': {
                'handlers': ['stream', 'file'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
                'level': 'DEBUG',
                'propagate': True,  # 向上(更高level的logger)传递
            },
        },
    }
    
    
    def get_logger():
        path = r'F:s24day21liye.log'
        LOGGING_DIC['handlers']['file']['filename'] = path
        logging.config.dictConfig(LOGGING_DIC)  # 导入上面定义的logging配置
        logger = logging.getLogger(__name__)  # 生成一个log实例
        return logger
    
    
    
    def save():
        logger = get_logger()
        logger.info(f'{} 存入300元')  # 记录该文件的运行状态
    
    save()
    
  • 相关阅读:
    git学习
    Command Line
    python之测试
    python之模块
    python之函数
    python之类
    python之错误和异常
    python之迭代器和生成器
    python之字典和集合
    python之列表和元组
  • 原文地址:https://www.cnblogs.com/beichen123/p/11300900.html
Copyright © 2011-2022 走看看