day24

内容回顾

# 单例模式 是一种设计模式
# 什么是单例模式
# 单例的应用场景
# __new__方法 :创建实例的 并且在init之前工作
# logging模块
# 记录日志的
# 用户 :
# 程序员 :
# 统计用的
# 用来做故障排除的 debug
# 用来记录错误,完成代码的优化的
# logging.basicconfig
# 使用方便
# 不能实现 编码问题;不能同时向文件和屏幕上输出
# logging.debug,logging.warning
# logger对象
# 复杂
# 创建一个logger对象
# 创建一个文件操作符
# 创建一个屏幕操作符
# 创建一个格式

# 给logger对象绑定 文件操作符
# 给logger对象绑定 屏幕操作符
# 给文件操作符 设定格式
# 给屏幕操作符 设定格式

# 用logger对象来操作
# import logging
#
# logger = logging.getLogger()
# fh = logging.FileHandler('log.log')
# sh = logging.StreamHandler()
# logger.addHandler(fh)
# logger.addHandler(sh)
# formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# fh.setFormatter(formatter)
# sh.setFormatter(formatter)
# logger.warning('message')

# collections模块
# OrderedDict
# from collections import OrderedDict
# odic = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
# print(odic)
# for k in odic:
# print(k,odic[k])

# defaultdict
# deque
# namedtuple
# from collections import namedtuple # 可命名元组
# Course = namedtuple('Course',['name','price','teacher'])
# python = Course('python',19800,'alex')
# print(python)
# print(python.name)
# print(python.price)
# 创建一个类,这个类没有方法,所有属性的值都不能修改
# 什么是模块,什么是包
# 什么是模块
# py文件 写好了的 对程序员直接提供某方面功能的文件
# import
# from import 名字

# 什么是包
# 文件夹 存储了多个py文件的文件夹
# 如果导入的是一个包,这个包里的模块默认是不能用的
# 导入一个包相当于执行 __init__.py文件中的内容

# 项目名
# bin start
# import os
# import sys
# base_path = os.path.dirname(os.path.dirname(__file__))
# sys.path.append(base_path)

# from src import core
# conf 配置 settings
# src 业务逻辑
# student.py
# from src import core
# core.py
# from conf import settings
# db 数据文件
# lib 扩展模块
# log 日志文件

# 补充
# 栈 Stack
#后进先出是栈 lifo
# 队列 Queue
# 先进先出是队列 fifo

# 反射
# hasattr
# getattr
ab = 'test'

# import demo
# print(getattr(demo,'a'))
# print(getattr(demo,'a'))

import demo
import sys
# print(demo)
# print(sys.modules)
# print(demo is sys.modules['demo'])
# print(getattr(sys.modules['demo'],'a'))
print(getattr(sys.modules[__name__],'ab'))
# '__main__': <module '__main__' from 'D:/code/day24/1.内容回顾.py'>
# setattr
# delattr

# 反射
# 通过 对象 来获取 实例变量、绑定方法
# 通过 类 来获取 类变量、类方法、静态方法
# 通过 模块名 来获取 模块中的任意变量(普通变量 函数 类)
# 通过 本文件 来获取 本文件中的任意变量
# getattr(sys.modules[__name__],'变量名')

# Foo抽象类/接口类
# 就是给字类一个规范,让子类必须按照抽象类的规范来实现方法

# class Foo:
# def func(self):
# raise NotImplementedError
#
# class Son(Foo):
# def func(self):
# pass
#
# s = Son()
# s.func()

 

 

面向对象的继承

#!/usr/bin/env python
# -*- coding:utf-8 -*-
class A:
pass
# def func(self):
# print('a')
class B(A):
pass
# def func(self):
# print('b')
class C(A):
def func(self):
print('c')
class D(B,C):
pass
# def func(self):
# print('d')
d = D()
d.func()
print(D.mro())
# DBCA
# DBAC

 

内容整理

# 模块
# os 和操作系统打交道的 - 计算文件夹的大小
# import os
# print(os.path.getsize('pack'))
# 文件
# 文件夹
# listdir ,walk
# 路径
# sys
# sys.path 模块搜索路径 一个模块是否能被导入 全看sys.path中是不是有这个模块所在的路径
# sys.argv 获取命令行的参数 python c://aaa.py remove 文件路径
# sys.modules 存储了当前程序中用到的所有模块,反射本文件中的内容
# datetime
# now() datetime对象
# utc() 当前的英国伦敦的时间
# strftime('%Y-%m-%d %H:%M:%S') 格式化时间
# strptime('2019-1-1 10:23:23','%Y-%m-%d %H:%M:%S')) 获取到一个datetime对象
# timedelta(days=140) 时间的加
# fromtimestamp(时间戳时间) 时间戳转datetime
# timestamp(datetime对象) datetime转时间戳
# from datetime import datetime
# dt = datetime.now()
# print(datetime.timestamp(dt))
# time
# time() 时间戳时间
# sleep(n) 让程序在这暂停n秒
# hashlib 摘要算法模块
# 密文验证
# 校验文件的一致性
# md5
# sha
# import hashlib
# md5 = hashlib.sha1('盐'.encode())
# md5.update(b'str')
# print(md5.hexdigest())
# 863c5545d295eef3dffe556a141a48b30565c763
# 序列化 把其他数据类型转换成 str/bytes类型
# 反序列化 str/bytes类型 转换回去
# json 所有的语言都支持
# json格式 :
# 1.所有的字符串都是双引号
# 2.最外层只能是列表或者字典
# 3.只支持 int float str list dict bool
# 4.存在字典字典的key只能是str
# 5.不能连续load多次
# pickle 只支持python语言
# 1.几乎所有的数据类型都可以写到文件中
# 2.支持连续load多次

# random
# randint
import random
# print(random.uniform(1,5))
# print(random.choice([1,2,3,4,5])) # 验证码 抽奖
# print(random.sample([1,2,3,4],3)) # 一个奖项抽取多个人
# choice
# sample
# shuffle # 洗牌 算法

# logging
# 两种配置方式
# basicconfig
# logger对象
# collections
# OderedDict
# namedtuple
# deque 双端队列
# defaultDict 默认字典,可以给字典的value设置一个默认值
# shutil
# import shutil
# shutil.make_archive() 压缩文件
# shutil.unpack_archive() 解压文件
# shutil.rmtree() 删除目录
# shutil.move() 重命名 移动文件
# getpass 在命令行密文显示输入的内容
# copy.deepcopy
# importlib
# importlibimport importlib
# importlib.import_module('模块名')
# os = __import__('os')
# print(os.path.isdir('D:\code\day24\pack'))
# print(os.path.isfile('D:\code\day24\pack'))
# functools
# reduce(add,iterable)

# 面向对象
# 基础概念
# 什么是类 : 具有相同方法和属性的一类事物
# 什么是对象、实例 : 一个拥有具体属性值和动作的具体个体
# 实例化 :从一个类 得到一个具体对象的过程
# 组合
# 一个类的对象作为另一个类对象的实例变量
# python是课程类的对象
# 晶晶是学生类的对象
# 晶晶.course = python
# 三大特性
# 继承
# 所有的查找名字(调用方法和属性)都是先找自己的,自己没有找父类
# 如果自己和父类都有,希望自己和父类都调用,super()/指定类名直接调
# 父类、基类、超类
# 子类、派生类
# 单继承 :字类可以使用父类的方法
# 多继承
# 查找顺序
# 深度优先
# 广度优先
# 多态
# 一个类表现出来的多种状态 --> 多个类表现出相似的状态
# vip_user
# 支付
# 浏览商品
# svip_user
# 支付
# 浏览商品
# 鸭子类型
# vip_user svip_user
# list 和 tuple
# 封装
# 广义的封装 :类中的成员
# 狭义的封装 :私有成员
# __名字
# 只能在类的内部使用,既不能在类的外部调用,也不能在子类中使用
# _类名__名字

# class A:
# def __func(self):
# print('A')
#
# class B(A):
# def func(self):
# self.__func()
# B()

# 类成员
# 类变量
# 绑定方法
# 特殊成员
# 类方法 classmethod
# 静态方法 staticmethod
# 属性 property
# 双下方法/魔术方法/内置方法
# __str__
# __new__ 构造方法
# __init__ 初始化方法
# __call__ 源码中很容易写这个用法
# __enter__ __exit__ with上下文管理
# __getitem__
# __settitem__
# __delitem__
# __add__
# __iter__
# __dict__

# 相关内置函数
# isinstance 对象和类
# issubclass 类和类
# type 类型 类 = type(对象)
# super 遵循mro顺序查找上一个类的

# 新式类和经典类
# py2 继承object就是新式类
# 默认是经典类
# py3 都是新式类,默认继承object

# 新式类
# 继承object
# 支持super
# 多继承 广度优先C3算法
# mro方法
# 经典类
# py2中不继承object
# 没有super语法
# 多继承 深度优先
# 没有mro方法

检验文件的一致性

#!/usr/bin/env python
# -*- coding:utf-8 -*-

# 两个文件的md5值是不是相同
import hashlib

# md5 = hashlib.md5()
# md5.update('hello'.encode())
# md5.update(',wusir'.encode())
# 46879507bf541e351209c0cd56ac160e
# 46879507bf541e351209c0cd56ac160e
# print(md5.hexdigest())

# 两个文件
# md5 = hashlib.md5()
# md5.update(文件1 的内容)
# md5.hexdigest()

# md5 = hashlib.md5()
# md5.update(文件2 的内容)
# md5.hexdigest()

posted @ 2020-05-26 21:16  投降输一半!  阅读(148)  评论(0编辑  收藏  举报