一 主动执行其他类的成员
1 class Base(object): 2 def f1(self): 3 print('5个功能') 4 class Foo(Base): 5 def f1(self): 6 print('3个功能') 7 Base.f1(self) 8 obj=Foo() 9 obj.f1()10 11 结果:3个功能12 5个功能13 14 15 class Base(object):16 def f1(self):17 print('5个功能')18 class Foo(object): 19 def f1(self):20 print('3个功能')21 Base.f1(self) #与继承无关22 obj=Foo()23 obj.f1()24 25 26 结果:3个功能27 5个功能28 总结:29 Base.实例方法(自己传self)30 与继承无关
1 class Foo(object): 2 def f1(self): 3 super().f1() #按照info的继承关系执行顺序 找下一个 4 print('3个功能') #super按照当前类的继承顺序找下一个 5 class Bar(object): 6 def f1(self): 7 print('6个功能') 8 class Info(Foo,Bar): 9 pass10 obj=Info()11 obj.f1()
二 约束:
1 class BaseMessade(object):2 def send(self):3 raise NotImplementedError('.send()必须被重写')4 5 6 # BaseMessade类用于约束,约束其派生类:保证派生类中必须编写send方法,不然执行可能就会执行报错
1 约束继承它的派生类必须实现它其中的抽象方法 2 abstact class Foo: 3 def f1(self): 4 print(1,3,4) 5 6 abstact def f2(self):pass 7 8 class Bar(Foo): 9 def f2(self):10 print('111')
接口中不予许在方法内部写代码,只能约束继承它的类必须实现借口中定义的的所有方法
1 nterface IFoo: 2 3 def f1(self,x1):pass 4 5 def f2(self,x1):pass 6 7 interface IBar: 8 9 def f3(self,x1):pass 10 11 def f4(self,x1):pass 12 13 class Foo(IFoo,IBar):# 实现了2个接口14 15 def f1(self,x1):pass 16 17 def f2(self,x1):pass 18 19 def f3(self,x1):pass 20 21 def f4(self,x1):pass
总结:
1 什么是接口以及作用?
接口是一种数据类型,主要用于约束派生类中必须实现指定的方法Python中不存在 java和c#中是存在的
2 Python中使用什么来约束?
抽象类+抽象方法,编写上麻烦
人为主动抛异常
3 约束时,抛出的异常是否可以使用其他的?
专业: raise NotlmplementeError(.send() 必须被重写)
不专业:raise Exception(.send() 必须被重写)
三: 自定义异常
异常处理:
1 import hashlib 2 3 SALT = b'2erer3asdfwerxdf34sdfsdfs90' 4 5 def md5(pwd): 6 # 实例化对象 7 obj = hashlib.md5(SALT) 8 # 写入要加密的字节 9 obj.update(pwd.encode('utf-8'))10 # 获取密文11 return obj.hexdigest() # 21232f297a57a5a743894a0e4a801fc3 # 66fbdc0f98f68d69cd458b0cee975fe3 # c5395258d82599e5f1bec3be1e4dea4a12 13 14 user = input("请输入用户名:")15 pwd = input("请输入密码:")16 if user == 'oldboy' and md5(pwd) == 'c5395258d82599e5f1bec3be1e4dea4a':17 print('登录成功')18 else:19 print('登录失败')
如何自定义异常:
1 class MyException(Exception): 2 def __init__(self,code,msg): 3 self.code = code 4 self.msg = msg 5 try: 6 # 知识点:主动抛出异常 7 raise MyException(1000,'操作异常') 8 9 except KeyError as obj:10 print(obj,1111)11 except MyException as obj: # 知识点:捕获异常 12 print(obj,2222)13 except Exception as obj:14 print(obj,3333)15
四 加密
1 import hashlib 2 3 SALT = b'2erer3asdfwerxdf34sdfsdfs90' 4 5 def md5(pwd): 6 # 实例化对象 7 obj = hashlib.md5(SALT) 8 # 写入要加密的字节 9 obj.update(pwd.encode('utf-8'))10 # 获取密文11 return obj.hexdigest() # 21232f297a57a5a743894a0e4a801fc3 # 66fbdc0f98f68d69cd458b0cee975fe3 # c5395258d82599e5f1bec3be1e4dea4a12 13 14 user = input("请输入用户名:")15 pwd = input("请输入密码:")16 if user == 'oldboy' and md5(pwd) == 'c5395258d82599e5f1bec3be1e4dea4a':17 print('登录成功')18 else:19 print('登录失败')
五日志
1 import logging 2 logger=logging.basicConfig(filename='xxx.txt', 3 format='%(asctime)s-%(name)s-%(levelname)s-%(module)s:%(message)s', 4 datefmt='%Y-%m-%d %H:%M:%S',level=30) 5 logging.debug('x1') 6 logging.info('x2') 7 logging.warning('x3') 8 logging.error('x4') 9 logging.critical('x5')10 logging.log(10,'x6')11 12 import traceback13 def func():14 try:15 a=a+116 except Exception as e:17 msg=traceback.format_exc()18 logging.error(msg)
1 import logging 2 3 logger1 = logging.basicConfig(filename='x1.txt', 4 format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', 5 datefmt='%Y-%m-%d %H:%M:%S', 6 level=30) 7 8 9 logger2= logging.basicConfig(filename='x2.txt',10 format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',11 datefmt='%Y-%m-%d %H:%M:%S',12 level=30)13 14 logging.error('x4')15 logging.error('x5')16 17 18 19 logger2中不能实现日志 x2.txt没有东西
1 # 创建一个操作日志的对象logger(依赖FileHandler) 2 file_handler = logging.FileHandler('l1.log', 'a', encoding='utf-8') 3 file_handler.setFormatter(logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s")) 4 5 logger1 = logging.Logger('s1', level=logging.ERROR) 6 logger1.addHandler(file_handler) 7 8 9 logger1.error('123123123')10 11 12 13 # 在创建一个操作日志的对象logger(依赖FileHandler)14 file_handler2 = logging.FileHandler('l2.log', 'a', encoding='utf-8')15 file_handler2.setFormatter(logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s"))16 17 logger2 = logging.Logger('s2', level=logging.ERROR)18 logger2.addHandler(file_handler2)19 20 logger2.error('666')