博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向对象3
阅读量:4627 次
发布时间:2019-06-09

本文共 5567 字,大约阅读时间需要 18 分钟。

一  主动执行其他类的成员

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()
super

二 约束:

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
java中的接口

总结:

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')
自定义日志

 

 

   

 

转载于:https://www.cnblogs.com/mlhz/p/9566792.html

你可能感兴趣的文章
9个完整android开源app项目
查看>>
使用WinINet和WinHTTP实现Http訪问
查看>>
ExtJs自学教程(1):一切从API開始
查看>>
使用MERGE语句同步表
查看>>
为web.config创建web.xsd
查看>>
div边框阴影的实现【转载】
查看>>
大数据平台资料收集
查看>>
css display:flex 属性
查看>>
微信小程序上拉加载和下拉刷新(wepy)
查看>>
Django创建对象的create和save方法
查看>>
如何在Mirth Connect中创建和调用自定义Java代码
查看>>
idea : shorten command line
查看>>
python if-elif-else 结构判断输入值处于何种年龄段
查看>>
批量修改名称
查看>>
autocomplete实现
查看>>
Vivado2016旧工程IP移动到新工程
查看>>
Cloudera Manager Free Edition 4.5安装问题汇总
查看>>
一道好题
查看>>
eclipse中安装SVN插件的方法及SVN插件下载
查看>>
每日英语:The New Cachet of 'Made In China'
查看>>