day 27 多态 接口 类方法 静态方法 hashlib 摘要算法模块
# 多态的理解:
# Python 天生自带多态
# 鸭子类型 list 和 tuple 就是一对鸭子类型 很像但是没有继承关系
#
# 而其他的类型 上传参数或者打印参数的时候 必须是指定的数据类型
# ---------
# 接口类的为了规范一个模板
# # 简单版的 必须符合继承父类的规范否则报错
# class Payment:
# def pay(self,money):
# raise NotImplementedError
# class Alipay(Payment):
# def pay(self,money):
# print('支付宝支付了%s元'%money)
# class Applepay(Payment):
# def pay(self,money):
# print('apple支付了%s元'%money)
# class Wechatpay(Payment):
# def fukuan(self,money):
# print('微信支付了%s元'%money)
# def pay(payment,money):
# return payment.pay(money)
# app = Applepay()
# pay(app,100) # 这里正常的函数上传 返回app.pay(100) 正好调用类的方法 打印出内容
# wechat = Wechatpay()
# pay(wechat,200) # 上传返回没有问题 但是返回后在在调用方法名不一样了
# ------------
# 这种继承多种方法的接口规范 只有不满足父类的全部方法就会报错
# from abc import ABCMeta,abstractmethod
# class Payment(metaclass=ABCMeta):
# @abstractmethod
# def pay(self,money):pass
# # @abstractmethod
# # def eat(self,monye):pass
# class Alipay(Payment):
# def pay(self,money):
# print('支付宝支付了%s元'%money)
# class Applepay(Payment):
# def pay(self,money):
# print('apple支付了%s元'%money)
# class Wechatpay(Payment):
# def fukuan(self,money):
# print('微信支付了%s元'%money)
# def pay(payment,money):
# return payment.pay(money)
# app = Applepay()
# pay(app,100) # 这里正常的函数上传 返回app.pay(100) 正好调用类的方法 打印出内容
# wechat = Wechatpay() #报错
# pay(wechat,200) # 上传返回没有问题 但是返回后在在调用方法名不一样了
# ------------------------
# 私有属性 伪装属性@property 把方法变成属性(前提方法名只有self一个参数,有返回值)
# 在此基础上@方法名.setter 设置修改静态属性 这里可以有两个参数
# 在此基础上@方法名.deleter 设置修改静态属性 这里可以有两个参数
# 简单版
# class Goods:
# __discount = 0.8
# def __init__(self,name,price):
# self.name = name
# self.__price = price
# def price_zh(self):
# return self.__price*Goods.__discount # 注意错点 这里的静态属性 引用需要类名.静态属性名
# app = Goods('苹果',10)
# print(app.price_zh())
# --------升级版 运用@property() setter() delattr()
# 需求 原价10元 改为8元 折后6.4 ,
# class Goods:
# __discount = 0.8
# def __init__(self,name,price):
# self.name = name
# self.__price = price
# @property
# def price_z(self):
# return self.__price*Goods.__discount # 注意错点 这里的静态属性 引用需要类名.静态属性名
# @price_z.setter
# def price_z(self,new_price):
# # # # if type(new_price)is float:
# # # # return self.__price == new_price #错点不需要返回值的
# # #if type(new_price)is int: #错点 如果是后边is float的话 输入必须是小数才行
# if type(new_price) is float:
# self.__price = new_price
# @
# app = Goods('苹果',10)
# app.price_z = 6.0 #上边用float
# app.price_z = 6.0 #上边用int
# # print(app.price)
# print(app.price_z)
# -----------
# 修改属性 并删除属性
# class Goods:
# __discount = 0.8
# def __init__(self,name,price):
# self.name = name
# self.__price = price
# @property
# def name_z(self):
# return self.name # 注意错点 这里的静态属性 引用需要类名.静态属性名
# @name_z.setter
# def name_z(self,new_name):
# self.name = new_name
# @name_z.deleter
# def name_z(self, new_name):
# del self.name
# #
# app = Goods('苹果',10)
# app.name_z = '香蕉'
# # print(app.name_z) # 修改成功
# # del app.name_z
# # print(app.name_z) #删除成功
# -------------------------------------------
# 类里面 普通方法self 类方法 cls 静态方法 staticmethod 绑定方法
# 四、classmethod和staticmthod(类方法、静态方法)
# 问题:定义一个类类里面的方法并没有用到self
# 例如:
# class Goods:
# __discount = 0.8
# def change_discount(self,new_discount):
# Goods.__discount = new_discount
# apple = Goods() # 实例化
# apple.change_discount(0.5)
# -----
# 类方法 @classmethod在不需要实例化的时候不用对象self相关
# 对静态属性进行修改的
# class Goods:
# __discount = 0.8
# @classmethod
# def change_discount(cls,new_discount): #和修改一样的
# cls.__discount = new_discount
# @classmethod
# def get_discount(cls): #方法得到 返回值
# return cls.__discount
# Goods.__discount = 0.5
# print(Goods.__discount)
#
# -----------------------
# 静态方法 @staticmethod
# 在不需要
# 如果这个方法既不需要操作静态变量,也不需要使用对象相关的操作,就使用静态方法
# class A:
# def func(): # 显示错误 但是可以运行的
# print(123) # 和类 对象也没有关系的
# A.func('alex')
# # ------
# class A:
# @staticmethod #静态方法的标志
# def func(name): #静态方法
# print(123) # 和类 对象也没有关系的
# A.func('alex')
# ---------
#-------------------------------------------
# hashlib 摘要算法模块 md5 和sha 一样的 难易程度 时间 长度不一样的
# 模板
# import hashlib
# objice1 = hasattr.md5(加盐的地方)
# objice1.update(b'摘要运算的内容') #字节码
# print(objice1.hexdigest()) # 加盐的 给 我的名字 加密 加盐的地方也有中文 运用md5
# import hashlib
# # name = hashlib.md5('加密了,加密了'.encode('utf-8')) # 中文的第一种
# name = hashlib.md5(bytes('加密了,加密了',encoding = 'utf-8')) #中文的第二种
# name.update(bytes('我的名字',encoding = 'utf-8')) #摘要内容的第一种
# # name.update('我的名字'.encode('utf-8')) #摘要内容的第二种
# print(name.hexdigest()) #注意易错hexdigest() 括号
#
# # 827b9d5333d7b979fc25d6fc14928014 # import hashlib
# mdd5 = hashlib.md5(b'lishi')
# mdd5.update(b'jassin')
# print(mdd5.hexdigest())
# 中文除了字母就用 b # 关于文件的 摘要算法 加密 userinfo文件夹名字 用户名 lishi 密码jassin
# import hashlib
# with open('userinfo','w')as f:
# wang = hashlib.md5(b'123ABC')
# wang.update(b'jassin')
# wangmd5 = wang.hexdigest()
# f.write('lishi|%s'%wangmd5)
# uesrname = input('username:')
# f = open('userinfo')
# lishi_info = f.readline().strip()
# user,passward = lishi_info.split('|')
# wang = hashlib.md5(b'123ABC')
# wang.update(bytes(pwd,encoding='utf-8'))
# if passward ==wang.hexdigest() and username ==user:
# print('登录成功')
# else:
# print('登录失败') # import hashlib
# #存储密文密码
# f = open('userinfo2','w')
# md5 = hashlib.md5(b'3714') #加盐处理
# md5.update(b'jassin')
# md5_value = md5.hexdigest()
# f.write('lishi|%s'%md5_value)
# f.close()
# #登录读取验证
# username = input('username:')
# pwd = input('pwd! ')
# f = open('userinfo2')
# lishi_info = f.readline().strip()
# user,passwd = lishi_info.split('|') # 用户名,密码
# md5 = hashlib.md5(b'3714') #加盐处理
# md5.update(bytes(pwd,encoding='utf-8'))
# if passwd == md5.hexdigest() and username == user:
# print('登录成功')
# else:
# print('我会对你说上一世情话')
day 27 多态 接口 类方法 静态方法 hashlib 摘要算法模块的更多相关文章
- hashlib摘要算法模块,logging日志,configparser配置文件模块
一.hashlib模块(摘要算法模块) 1.算法介绍 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢? 摘要算法又称哈希算法.散列算法.它通过一个函数,把 ...
- php面向对象 封装继承多态 接口、重载、抽象类、最终类总结
1.面向对象 封装继承多态 接口.重载.抽象类.最终类 面向对象 封装继承多态 首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一 ...
- C#基础总结之八面向对象知识点总结-继承与多态-接口
.方法深入讲解(返回值,形参与实参) 方法 public int getName(int i,int j) { int sum = i + j; return sum; } .利用泛型存储对象数据 . ...
- python的类的 静态属性 类方法 静态方法
一.静态属性 静态属性说的就是数据属性 1.定义一个房间的类,求下这个房间的面积 class Room: def __init__(self,name,ower,width,length,heigh) ...
- “全栈2019”Java第六十四章:接口与静态方法详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- python__基础 : 类属性,类方法,静态方法
类属性 定义在类里面,方法外面的属性,一般属于这个类,如下面的 num 就是类属性: class Test: num = 类属性用 实例.类属性 或者 类.类属性 都可以访问, 如 a = Te ...
- JDK8 直接定义接口中静态方法
JDK8前,接口只能是抽象方法. 但是在JDK8中,静态方法是可以直接定义方法体,可以直接用接口名调用.实现类和实现是不可以调用的 一.直接调用接口的静态方法 二.实现接口的子类来调用接口的静态方法 ...
- Python进阶----类的结构(公有成员 , 私有成员(私有属性,私有方法),类方法,静态方法,属性) ,isinstance 和issubcalss ,元类(type())
Python进阶----类的结构(公有成员 , 私有成员(私有属性,私有方法),类方法,静态方法,属性) ,isinstance 和issubcalss ,元类(type()) 一丶类的结构细分 ...
- hashlib-sha摘要算法模块
摘要:hashlib: 摘要算法的模块 用处: 1.查看某两个文件是否完全一致 "abcdefggg" "abcdefhhg" 2.加密认证 把密码加密后写入文 ...
随机推荐
- Confluence 6 教程:空间高手
这个教程将会带你如何在 Confluence 中创建和自定义空间,同时也包括如何删除空间,如果需要的话.通过这个教程,你将成为使用空间的高手. 你需要具有创建空间(Create space)和创建个人 ...
- Two Melodies CodeForces - 813D (DP,技巧)
https://codeforces.com/problemset/problem/813/D dp[i][j] = 一条链以i结尾, 另一条链以j结尾的最大值 关键要保证转移时两条链不能相交 #in ...
- xShell的简单操作记录
查看java进程: ps ux | grep java 显示当前所有java进程pid的命令:jps 将压缩文件从本地上传到服务器上:rz 打包成jar包:mvn clean package -Dma ...
- Codeforces Round #503 (by SIS, Div. 1)E. Raining season
题意:给一棵树每条边有a,b两个值,给你一个m,表示从0到m-1,假设当前为i,那么每条边的权值是a*i+b,求该树任意两点的最大权值 题解:首先我们需要维护出(a,b)的凸壳,对于每个i在上面三分即 ...
- php 求余
一,异号 1.函数值符号规律(余数的符号) mod(负,正)=正 mod(正,负)=负 结论:两个整数求余时,其值的符号为除数的符号. 2.取值规律 先将两个整数看作是正数,再作除法运算 ①能整除时, ...
- c# 线程的生命周期
对于线程而言有两种类型:前台线程,后台线程.前台与后台线程性质相同,但终止条件不同. 后台线程:在运行过程中如果宿主进程结束,线程将直接终止执行:在强制终止时,线程即终止执行不论线程代码是否执行完毕. ...
- Java中获得当前静态类的类名
通常在打印日志的时候需要输出类名,普通类可以用this.getClass(),但是静态类没有this,直接写类名耦合度高. 参考了: https://stackoverflow.com/questio ...
- PostgreSQL导出一张表到MySQL
1. 查看PostgreSQL表结构,数据量,是否有特殊字段值 region_il=# select count(*) from result_basic; count --------- ( row ...
- 前端页面兼容ie8解决方法
一.通用兼容文件的引用: 1.HTML5标签兼容方案:html5shiv.js GitHub地址:https://github.com/aFarkas/html5shiv/ IE8不支持HTML5的新 ...
- iOS封装功能生成 .framework
前言 如果你想将你开发的控件与别人分享,一种方法是直接提供源代码文件.然而,这种方法并不是很优雅.它会暴露所有的实现细节,而这些实现你可能并不想开源出来.此外,开发者也可能并不想看到你的所有代码,因为 ...