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()
    
  • 相关阅读:
    HDU 5744
    HDU 5815
    POJ 1269
    HDU 5742
    HDU 4609
    fzu 1150 Farmer Bill's Problem
    fzu 1002 HangOver
    fzu 1001 Duplicate Pair
    fzu 1150 Farmer Bill's Problem
    fzu 1182 Argus 优先队列
  • 原文地址:https://www.cnblogs.com/beichen123/p/11300900.html
Copyright © 2011-2022 走看看