面向对象3

一  主动执行其他类的成员

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

 

 

   

 

posted @ 2018-08-31 16:59  茉莉花M  阅读(185)  评论(0编辑  收藏  举报