zoukankan      html  css  js  c++  java
  • 面向对象回顾01

    面向对象初识
    1.函数式编程 对 面向过程编程的两个特点
    减少代码的重复性
    增强代码的可读性
    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)

    1. 类名调用类中的方法(一般类中的(静态方法,类方法)方法不会通过类名调用)
      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': 102410241024, # 日志大小 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()

  • 相关阅读:
    Cesium加载Geowebcache切片
    Vue开发--脚手架的搭建
    OpenLayers动态测量距离和面积,并可自定义测量的线样式
    OpenLayers要素拖拽
    改造SuperMap的DrawHandler接口,自定义绘制的图形样式
    Cesium动态绘制实体(点、标注、面、线、圆、矩形)
    ArcMap制图遇到的小问题
    GeoServer 2.15.2版本跨域问题解决方法
    MySQL 8.0 主从同步
    Service__cmd--MySQL安装并连接SQLyog
  • 原文地址:https://www.cnblogs.com/-777/p/11291422.html
Copyright © 2011-2022 走看看