zoukankan      html  css  js  c++  java
  • 面向对象初识

    面向对象初识

    1.面向对象的优点:

    • 对相似功能的函数,同一个业务下的函数进行归类,分类
    • 站在上帝的角度构建代码,类就是一个公共的模板,对象就是从模板实例化出来的,得到对象就得到了一切

    学习面向对象必须站在一个上帝的角度去分析考虑问题.

    2.类的结构

    类:具有相同属性和功能的一类事物.
    对象:某个类的具体体现
    
    定义:
    class 类名:
        类的具体结构
        
        
    class Human:
        #静态属性
        mind = "有思想" #类的属性(静态属性,静态字段)
        language = "使用语言"
        def __init__(self,name,age):
            self.name = name
            self.age = age
        #动态方法
        def work(self):
            print("人类都会工作")
        def eat(self):
            print("人类都需要吃饭")
    
    

    3.从类名的角度研究类

    class Human:
        mind = "有思想" #类的属性(静态属性,静态字段)
        language = "使用语言"
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def work(self):
            print("人类都会工作")
        def eat(self):
            print("人类都需要吃饭")
            
    1.类名操作类中的属性
    	
        类名查看类中所有的内容
      		print(Human.__dict__)
      
    
        类名操作类中的静态属性(万能的点.)
    增:
        Human.body = "有四肢"
      
    删:
        del Human.mind
      
    改:
        Human.mind = "live"
      
    查:
        print(Human.language)
        
    2.类名调用类中的方法(一般类中的(静态方法,类方法)方法不会通过类名调用)
    
    Human.work(参数)
    
    总结:
        一般类名就是操作类中的属性
      
    

    4.从对象角度研究类

    class Human:
        mind = "有思想" #类的属性(静态属性,静态字段)
        language = "使用语言"
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def work(self):
            print("人类都会工作")
        def eat(self):
            print("人类都需要吃饭")
    
    1.什么是对象?
    类名()    --实例化过程
    
    obj = Human() #得到一个返回值,这个返回值就是对象/实例.
    print(obj)
    
    实例化一个对象发生了三件事:
        1.在内存中开辟一个对象空间
        2.自动执行__init__方法,并且将对象地址传给self
        3.运行__init__方法内的代码,给对象空间封装属性
    
    2.对象查看类中的属性
    	print(obj.mind)
    3.对象操作类中的方法
    	obj.work()
        obj.eat()
    

    5.self

    self本身来说就是类中的方法的第一个位置参数,它会自动接受对象内存地址

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

    class Human:
        mind = "有思想" 
        language = "使用语言"
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def work(self):
            print("人类都会工作")
        def eat(self):
            print("人类都需要吃饭")
            
    obj1 = Human('小胖',18)
    obj2 = Human('小红',20)
    print(obj1,obj2)
    

    logging模块补充:

    1.系统日志
    记录操作系统,服务器的硬件性能状态(cpu,网卡,内存运行)将你获取到的参数通过日志写入文件中,记录运维人员的命令.
    2.网站日志
    用户的访问次数,用户的停留时间,访问量,各地区访问量,等等
    3.开发辅助日志
    debug,info模式,代替print,try,except
    4.用户信息日志
    记录用户的转账,流水等用户对系统的操作5
    
    
    import os
    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 = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
    
    id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
    
    # 定义日志输出格式 结束
    
    logfile_dir = os.path.dirname(os.path.abspath(__file__))  # log文件的目录
    
    logfile_name = 'all2.log'  # log文件名
    
    # 如果不存在定义的日志目录就创建一个
    if not os.path.isdir(logfile_dir):
        os.mkdir(logfile_dir)
    
    # log文件的全路径
    logfile_path = os.path.join(logfile_dir, logfile_name)
    
    # log配置字典
    LOGGING_DIC = {
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {
            'standard': {
                'format': standard_format
            },
            'simple': {
                'format': simple_format
            },
        },
        'filters': {},
        'handlers': {
            #打印到终端的日志
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',  # 打印到屏幕
                'formatter': 'simple'
            },
            #打印到文件的日志,收集info及以上的日志
            'default': {
                'level': 'DEBUG',
                'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
                'formatter': 'standard',
                'filename': None,  # 日志文件
                'maxBytes': 1024*1024*5,  # 日志大小 5M
                'backupCount': 5,
                'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
            },
        },
        'loggers': {
            #logging.getLogger(__name__)拿到的logger配置
            '': {
                'handlers': ['default', 'console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
                'level': 'DEBUG',
                'propagate': True,  # 向上(更高level的logger)传递
            },
        },
    }
    
    
    def get_logger():
        path = os.path.join("登陆用户的log文件的路径")
        LOGGING_DIC['handlers']['default']['filename'] = path
        logging.config.dictConfig(LOGGING_DIC)  # 导入上面定义的logging配置
        logger = logging.getLogger(__name__)  # 生成一个log实例
        return logger
    
    
    #调用时:
    def save():
        logger = get_logger()
        logger.info('It works!')  # 记录该文件的运行状态
    
        
    if __name__ == '__main__':
        load_my_logging_cfg()
    
        
        
        
    字典放在settings里面,get_logger放到common文件里面,log文件的全路径也需要改变
    
    字典中的filename 设置成 None
    
    
  • 相关阅读:
    commons-lang3工具类学习(三)
    commons-lang3工具类学习(二)
    commons-lang3工具类学习(一)
    Spring之ClassPathResource加载资源文件
    Spring详解(十)加载配置文件
    java IO流总结
    Spring自定义注解配置切面实现日志记录
    使用@Cacheable 踩过的坑
    将BufferedImage转换为InputStream,亲测可用
    计算两个日期之间间隔的天数
  • 原文地址:https://www.cnblogs.com/tutougold/p/11295722.html
Copyright © 2011-2022 走看看