s21day21 python笔记

一、内容回顾及补充

  • 内置函数补充

    • type():查看数据类型

      1. class Foo:
      2. pass
      3. obj = Foo()
      4. if type(obj) == Foo:
      5. print('obj是Foo类的对象')
    • issubclass(类,类或其基类):判断前一个类是否是后一个类或其基类的子类

      • 结果是布尔类型,是 -> True,否 -> False
      1. class Base:
      2. pass
      3. class Base1(Base):
      4. pass
      5. class Foo(Base1):
      6. pass
      7. class Bar:
      8. pass
      9. print(issubclass(Bar,Base))
      10. print(issubclass(Foo,Base))
    • isinstance(对象,类或其基类):判断一个对象是否是一个类或其基类的实例(对象)

      • 结果是布尔类型,是 -> True,否 -> False
      • 注意:判断一个对象是否是一个类的实例(对象),一定要用type,不要用isinstance
      1. class Base(object):
      2. pass
      3. class Foo(Base):
      4. pass
      5. obj = Foo()
      6. print(isinstance(obj,Foo)) # 判断obj是否是Foo类或其基类的实例(对象)
      7. print(isinstance(obj,Base)) # 判断obj是否是Foo类或其基类的实例(对象)
    • super().方法名():根据self对象所属的类的继承关系,按照顺序依次找方法并执行(找到第一个为止)

      1. class Base(object):
      2. def func(self):
      3. super().func() # 根据self对象所属类的继承关系,按照顺序挨个找func方法并执行(找到第一个为止)
      4. print('base.func')
      5. class Bar(object):
      6. def func(self):
      7. print('bar.func')
      8. class Foo(Base,Bar): # Foo -> Base -> Bar
      9. pass
      10. obj = Foo()
      11. obj.func()

二、特殊成员

  • 特殊成员:就是为了能够快速实现执行某些方法而生

2.1 __init__

  • 初始化方法
  • 用途:用于给对象中赋值
  1. class Foo:
  2. def __init__(self,a1):
  3. self.a1 = a1
  4. obj = Foo('alex')

2.2 __new__

  • 构造方法
  • 用于创建空对象
  1. class Foo(object):
  2. def __init__(self):
  3. self.x = 123
  4. def __new__(cls, *args, **kwargs):
  5. return object.__new__(cls)
  6. obj = Foo() # 先执行__new__方法,再执行__init__方法

2.3 __call__

  • 对象后面加括号执行该方法
  1. class Foo(object):
  2. def __call__(self, *args, **kwargs):
  3. print('执行call方法')
  4. obj = Foo()
  5. obj() # 对象后面加括号,执行__call__方法
  6. # 相当于Foo()()
  • 网站示例:
  1. from wsgiref.simple_server import make_server
  2. def func(environ,start_response):
  3. start_response("200 OK", [('Content-Type', 'text/plain; charset=utf-8')])
  4. return ['你好'.encode("utf-8") ]
  5. class Foo(object):
  6. def __call__(self, environ,start_response):
  7. start_response("200 OK", [('Content-Type', 'text/html; charset=utf-8')])
  8. return ['你<h1 style="color:red;">不好</h1>'.encode("utf-8")]
  9. # 作用:写一个网站,用户只要来方法,就自动找到第三个参数并执行。
  10. server = make_server('127.0.0.1', 8000, Foo())
  11. server.serve_forever()

2.4 __getitem__ __setitem__ __delitem__

  1. class Foo(object):
  2. def __setitem__(self, key, value):
  3. pass
  4. def __getitem__(self, item):
  5. return 'uuu'
  6. def __delitem__(self, key):
  7. pass
  8. obj1 = Foo()
  9. obj1['k1'] = 123 # 内部会自动调用 __setitem__方法
  10. val = obj1['xxx'] # 内部会自动调用 __getitem__方法,用val接受返回值
  11. del obj1['ttt'] # 内部会自动调用 __delitem__ 方法

2.5 __str__

  • 只有在打印对象时,会自动化调用此方法,并将其返回值在页面显示出来
  1. class Foo(object):
  2. def __str__(self):
  3. return 'asdfasudfasdfsad'
  4. obj = Foo()
  5. print(obj) # obj是一个对象,打印__str__方法的返回值
  • 示例:
  1. class User(object):
  2. def __init__(self,name,email):
  3. self.name = name
  4. self.email = email
  5. def __str__(self):
  6. return "%s %s" %(self.name,self.email,)
  7. user_list = [User('二狗','2g@qq.com'),User('二蛋','2d@qq.com'),User('狗蛋','xx@qq.com')]
  8. for item in user_list:
  9. print(item)

2.6 __dict__

  • 去对象中找到所有变量并将其转换为字典
  1. class Foo(object):
  2. def __init__(self,name,age,email):
  3. self.name = name
  4. self.age = age
  5. obj = Foo('alex',19)
  6. val = obj.__dict__ # 去对象中找到所有变量并将其转换为字典
  7. print(val)

2.7 __enter__ __exit__

  • 上下文管理
  1. # 面试题
  2. class Foo(object):
  3. def do_something(self):
  4. print('内部执行') # 第三步
  5. class Context:
  6. def __enter__(self):
  7. print('进入') # 第一步
  8. return Foo()
  9. def __exit__(self, exc_type, exc_val, exc_tb):
  10. print('推出') # 第四步
  11. with Context() as ctx:
  12. print('内部执行') # 第二步
  13. ctx.do_something()

2.8 __add__

  • 两个对象相加时用到此方法
  1. class Foo(object):
  2. def __add__(self, other): # self:obj1,other:obj2
  3. return 123
  4. obj1 = Foo()
  5. obj2 = Foo()
  6. val = obj1 + obj2 # 内部会自动调用 __add__方法,并用val接受返回值
  7. print(val) # 123

三、异常处理

3.1 基本格式

  1. # 示例一:
  2. import requests
  3. try: # 尝试进行下面操作,如果可以执行,就执行下面代码
  4. ret = requests.get('http://www.google.com')
  5. print(ret.text)
  6. except Exception as e: # 如果不可以执行(平时会报错),这时不会报错,执行下面代码
  7. print('请求异常')
  8. # 示例二:
  9. try:
  10. v = []
  11. v[11111] # IndexError类型的异常
  12. except ValueError as e: # ValueError是一个类,继承Exception,只能捕获到ValueError类型的异常
  13. pass
  14. except IndexError as e: # IndexError是一个类,继承Exception,只能捕获到IndexError类型的异常
  15. pass
  16. except Exception as e: # Exception是一个类,可以捕获到所有异常
  17. print(e) # e是Exception类的对象,存储了一个错误信息
  • finally

    1. try:
    2. int('asdf')
    3. except Exception as e:
    4. print(e)
    5. finally:
    6. print('最后无论对错都会执行')
    7. # 特殊情况:
    8. def func():
    9. try:
    10. int('asdf')
    11. except Exception as e:
    12. return 123
    13. finally:
    14. print('最后') # 无论对错,函数中遇到return,也会执行,执行完后再return
    15. func()
  • 建议:书写函数或功能时,建议用try包裹一下,避免报错

  • 示例

    1. # 1. 写函数,函数接受一个列表,请将列表中的元素每个都 +100
    2. def func(arg):
    3. result = []
    4. for item in arg:
    5. if item.isdecimal():
    6. result.append(int(item) + 100)
    7. return result
    8. # 2. 写函数去,接受一个列表。列表中都是url,请访问每个地址并获取结果
    9. import requests
    10. def func1(url_list):
    11. result = []
    12. try:
    13. for url in url_list:
    14. response = requests.get(url)
    15. result.append(response.text)
    16. except Exception as e:
    17. pass
    18. return result
    19. def func2(url_list):
    20. result = []
    21. for url in url_list:
    22. try:
    23. response = requests.get(url)
    24. result.append(response.text)
    25. except Exception as e:
    26. pass
    27. return result
    28. # 这两个函数执行结果是不一样的,是try所处的位置不同导致的
    29. func1(['http://www.baidu.com','http://www.google.com','http://www.bing.com'])
    30. func2(['http://www.baidu.com','http://www.google.com','http://www.bing.com'])

3.2 主动触发异常

  1. try:
  2. int('123')
  3. raise Exception('XXX') # 代码中主动抛出异常
  4. except Exception as e:
  5. print(e) # XXX
  • 示例:

    1. def func():
    2. result = True
    3. try:
    4. with open('x.log',mode='r',encoding='utf-8') as f:
    5. data = f.read()
    6. if 'alex' not in data:
    7. raise Exception()
    8. except Exception as e:
    9. result = False
    10. return result

3.3 自定义异常

  1. class MyException(Exception): # 自定义异常,继承Exception
  2. pass
  3. try:
  4. raise MyException('asdf') # 主动触发自定义异常,只有自定义异常自己和Exception能捕获到
  5. except MyException as e:
  6. print(e)

s21day21 python笔记的更多相关文章

  1. Python笔记之不可不练

    如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...

  2. boost.python笔记

    boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ...

  3. 20.Python笔记之SqlAlchemy使用

    Date:2016-03-27 Title:20.Python笔记之SqlAlchemy使用 Tags:python Category:Python 作者:刘耀 博客:www.liuyao.me 一. ...

  4. Python笔记——类定义

    Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...

  5. 13.python笔记之pyyaml模块

    Date:2016-03-25 Title:13.Python笔记之Pyymal模块使用 Tags:Python Category:Python 博客地址:www.liuyao.me 作者:刘耀 YA ...

  6. 8.python笔记之面向对象基础

    title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...

  7. python笔记 - day8

    python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ...

  8. python笔记 - day7-1 之面向对象编程

    python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: ...

  9. python笔记 - day7

    python笔记 - day7 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 面向对象,初级篇: http://www.cnblog ...

随机推荐

  1. MySQL—概念,用户的创建,主键,外键,数据类型,表格创建

    MySQL DBMS,MySQL的概念,数据库分类,以前MySQL的部署中的一些概念 #DBMS:数据库管理系统,用于管理数据库的大型软件.mysql就是dbms的一种 #Mysql:是用于管理文件的 ...

  2. caffe源码阅读

    参考网址:https://www.cnblogs.com/louyihang-loves-baiyan/p/5149628.html 1.caffe代码层次熟悉blob,layer,net,solve ...

  3. MATLAB中a(:)和." ' "," ' "

    今天继续学习matlab看书时发现了一行代码 a=a(:).'; 起初可能不懂就百度一下 a(:)可以将向量转换为列向量,行向量相当于直接转置,列向量不变 而如果是n*m维向量则仍然是以列为主,即按照 ...

  4. 蒙层嵌套pdf以及连接后台

    一.在本地浏览pdf(直接将element-dialog 和 iframe相结合)需要将要浏览的pdf放入static文件夹下面 <el-button type="text" ...

  5. Python-点滴

    本节内容: python简介 安装(python,pycharm) 第一个程序(Hello,World!) 变量 用户输入 字符编码 格式化输出 if流程控制 while循环 for循环 一.Pyth ...

  6. 活代码LINQ——02

    一.复习基础——属性与实例变量 'Fig. 4.8:GradeBookTest.vb 'Create and manipulate a GradeBook object. Module GradeBo ...

  7. spring security 学习

    1.默认登录   user  /df1fc617-bb94-494e-8adb-0234046bf092 取消校验 在启动类上添加下面的注解 @EnableAutoConfiguration(excl ...

  8. JAVA面向对象之重载与重写

    重写:子类对父类方法的重新编写 返回值不变,形参不变 不能抛出新的或者范围更广的异常 class Animal{ public void move(){ System.out.println(&quo ...

  9. 关于Appium android input manager for Unicode 提示信息

    Appium调完输入法后,会弹出  Appium android input manager for Unicode 提示信息相关的提示信息,每次运行如此,如下图 网络上查找一遍,基本解决了,只要在设 ...

  10. 当锚点定位遇上position: fixed

    <!DOCTYPE html><html> <head> <title>当锚点定位遇上position: fixed</title> < ...