一 主动执行其他类的成员

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 pass 10 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')
接口(java中存在,python中不存在)
接口中不予许在方法内部写代码,只能约束继承它的类必须实现借口中定义的的所有方法

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 # c5395258d82599e5f1bec3be1e4dea4a 12 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 # c5395258d82599e5f1bec3be1e4dea4a 12 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 traceback 13 def func(): 14 try: 15 a=a+1 16 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')