zoukankan      html  css  js  c++  java
  • 面向对象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')
    自定义日志

       

  • 相关阅读:
    在线支付模块小结
    Tomcat服务器热启动,修改项目源代码时不需要每次都重启Tomcat
    使用myeclipse进行hibernate快速开发
    hibernate的核心类和接口
    Hibernate手动配置
    Java的字符串md5加密和文件md5
    JDBC操作mysql数据库(SqlHelper类封装)
    yum报错[Errno 14] PYCURL ERROR 22(更换yum源)
    Ajax技术
    手动配置开发struts项目
  • 原文地址:https://www.cnblogs.com/mlhz/p/9566792.html
Copyright © 2011-2022 走看看