s21day21 python笔记
s21day21 python笔记
一、内容回顾及补充
- 内置函数补充 - type():查看数据类型 - class Foo: pass obj = Foo() if type(obj) == Foo: print('obj是Foo类的对象')
- issubclass(类,类或其基类):判断前一个类是否是后一个类或其基类的子类 - 结果是布尔类型,是 -> True,否 -> False
 - class Base: pass class Base1(Base): pass class Foo(Base1): pass class Bar: pass print(issubclass(Bar,Base)) print(issubclass(Foo,Base))
- isinstance(对象,类或其基类):判断一个对象是否是一个类或其基类的实例(对象) - 结果是布尔类型,是 -> True,否 -> False
- 注意:判断一个对象是否是一个类的实例(对象),一定要用type,不要用isinstance
 - class Base(object): pass class Foo(Base): pass obj = Foo() print(isinstance(obj,Foo)) # 判断obj是否是Foo类或其基类的实例(对象) print(isinstance(obj,Base)) # 判断obj是否是Foo类或其基类的实例(对象)
- super().方法名():根据self对象所属的类的继承关系,按照顺序依次找方法并执行(找到第一个为止) - class Base(object): def func(self): super().func() # 根据self对象所属类的继承关系,按照顺序挨个找func方法并执行(找到第一个为止) print('base.func') class Bar(object): def func(self): print('bar.func') class Foo(Base,Bar): # Foo -> Base -> Bar pass obj = Foo() obj.func()
 
二、特殊成员
- 特殊成员:就是为了能够快速实现执行某些方法而生
2.1 __init__
- 初始化方法
- 用途:用于给对象中赋值
class Foo:
    def __init__(self,a1):
        self.a1 = a1
obj = Foo('alex')2.2 __new__
- 构造方法
- 用于创建空对象
class Foo(object):
    def __init__(self):
        self.x = 123
    def __new__(cls, *args, **kwargs):
        return object.__new__(cls)
obj = Foo()     # 先执行__new__方法,再执行__init__方法2.3 __call__
- 对象后面加括号执行该方法
class Foo(object):
    def __call__(self, *args, **kwargs):
        print('执行call方法')
obj = Foo()
obj()        # 对象后面加括号,执行__call__方法
# 相当于Foo()()- 网站示例:
from wsgiref.simple_server import make_server
def func(environ,start_response):
    start_response("200 OK", [('Content-Type', 'text/plain; charset=utf-8')])
    return ['你好'.encode("utf-8")  ]
class Foo(object):
    def __call__(self, environ,start_response):
        start_response("200 OK", [('Content-Type', 'text/html; charset=utf-8')])
        return ['你<h1 style="color:red;">不好</h1>'.encode("utf-8")]
# 作用:写一个网站,用户只要来方法,就自动找到第三个参数并执行。
server = make_server('127.0.0.1', 8000, Foo())
server.serve_forever()2.4 __getitem__   __setitem__   __delitem__
class Foo(object):
    def __setitem__(self, key, value):
        pass
    def __getitem__(self, item):
        return 'uuu'
    def __delitem__(self, key):
        pass
obj1 = Foo()
obj1['k1'] = 123        # 内部会自动调用 __setitem__方法
val = obj1['xxx']       # 内部会自动调用 __getitem__方法,用val接受返回值
del obj1['ttt']         # 内部会自动调用 __delitem__ 方法2.5 __str__
- 只有在打印对象时,会自动化调用此方法,并将其返回值在页面显示出来
class Foo(object):
    def __str__(self):
        return 'asdfasudfasdfsad'
obj = Foo()
print(obj)     # obj是一个对象,打印__str__方法的返回值- 示例:
class User(object):
    def __init__(self,name,email):
        self.name = name
        self.email = email
    def __str__(self):
        return "%s %s" %(self.name,self.email,)
user_list = [User('二狗','2g@qq.com'),User('二蛋','2d@qq.com'),User('狗蛋','xx@qq.com')]
for item in user_list:
    print(item)2.6 __dict__
- 去对象中找到所有变量并将其转换为字典
class Foo(object):
    def __init__(self,name,age,email):
        self.name = name
        self.age = age
obj = Foo('alex',19)
val = obj.__dict__     # 去对象中找到所有变量并将其转换为字典
print(val)2.7 __enter__    __exit__
- 上下文管理
# 面试题
class Foo(object):
    def do_something(self):
        print('内部执行')      # 第三步
class Context:
    def __enter__(self):
        print('进入')           # 第一步
        return Foo()
    def __exit__(self, exc_type, exc_val, exc_tb):
        print('推出')      # 第四步
with Context() as ctx:
    print('内部执行')      # 第二步
    ctx.do_something()2.8 __add__
- 两个对象相加时用到此方法
class Foo(object):
    def __add__(self, other):    # self:obj1,other:obj2
        return 123      
obj1 = Foo()
obj2 = Foo()
val  = obj1 + obj2    # 内部会自动调用 __add__方法,并用val接受返回值
print(val)      # 123三、异常处理
3.1 基本格式
# 示例一:
import requests
try:     # 尝试进行下面操作,如果可以执行,就执行下面代码
    ret = requests.get('http://www.google.com')
    print(ret.text)
except Exception as e:   # 如果不可以执行(平时会报错),这时不会报错,执行下面代码
    print('请求异常')   
# 示例二:
try:
    v = []
    v[11111]          # IndexError类型的异常
except ValueError as e:   # ValueError是一个类,继承Exception,只能捕获到ValueError类型的异常
    pass
except IndexError as e:   # IndexError是一个类,继承Exception,只能捕获到IndexError类型的异常
    pass
except Exception as e:    # Exception是一个类,可以捕获到所有异常
    print(e)           # e是Exception类的对象,存储了一个错误信息- finally - try: int('asdf') except Exception as e: print(e) finally: print('最后无论对错都会执行') # 特殊情况: def func(): try: int('asdf') except Exception as e: return 123 finally: print('最后') # 无论对错,函数中遇到return,也会执行,执行完后再return func()
- 建议:书写函数或功能时,建议用try包裹一下,避免报错 
- 示例 - # 1. 写函数,函数接受一个列表,请将列表中的元素每个都 +100 def func(arg): result = [] for item in arg: if item.isdecimal(): result.append(int(item) + 100) return result # 2. 写函数去,接受一个列表。列表中都是url,请访问每个地址并获取结果 import requests def func1(url_list): result = [] try: for url in url_list: response = requests.get(url) result.append(response.text) except Exception as e: pass return result def func2(url_list): result = [] for url in url_list: try: response = requests.get(url) result.append(response.text) except Exception as e: pass return result # 这两个函数执行结果是不一样的,是try所处的位置不同导致的 func1(['http://www.baidu.com','http://www.google.com','http://www.bing.com']) func2(['http://www.baidu.com','http://www.google.com','http://www.bing.com'])
3.2 主动触发异常
try:
    int('123')
    raise Exception('XXX')     # 代码中主动抛出异常
except Exception as e:
    print(e)     # XXX- 示例: - def func(): result = True try: with open('x.log',mode='r',encoding='utf-8') as f: data = f.read() if 'alex' not in data: raise Exception() except Exception as e: result = False return result
3.3 自定义异常
class MyException(Exception):    # 自定义异常,继承Exception
    pass
try:
    raise MyException('asdf')    # 主动触发自定义异常,只有自定义异常自己和Exception能捕获到
except MyException as e:
    print(e)s21day21 python笔记的更多相关文章
- Python笔记之不可不练
		如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ... 
- boost.python笔记
		boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ... 
- 20.Python笔记之SqlAlchemy使用
		Date:2016-03-27 Title:20.Python笔记之SqlAlchemy使用 Tags:python Category:Python 作者:刘耀 博客:www.liuyao.me 一. ... 
- Python笔记——类定义
		Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ... 
- 13.python笔记之pyyaml模块
		Date:2016-03-25 Title:13.Python笔记之Pyymal模块使用 Tags:Python Category:Python 博客地址:www.liuyao.me 作者:刘耀 YA ... 
- 8.python笔记之面向对象基础
		title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ... 
- python笔记 - day8
		python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ... 
- python笔记 - day7-1 之面向对象编程
		python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: ... 
- python笔记 - day7
		python笔记 - day7 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 面向对象,初级篇: http://www.cnblog ... 
随机推荐
- js中的setTimeout和setinterval 用法说明
			setTimeout("countSecond()", 1000)://countSecond()是函数(方法) setTimeout 只执行一次函数,需要传递两个参数1是函数名, ... 
- Hibernate的HQL语句中定位参数和具名参数传参
			HQL查询: 1.有关hql查询语句中的问号参数形式,如果出现有多个问号,这对后面设置参数就比较麻烦. 如:from User user where user.name=? and user.age= ... 
- Android 音视频深入  二十一  FFmpeg视频剪切
			视频剪切我意外的发现上一次的视频压缩的代码能够运行FFmpeg视频剪切的命令,但是不能做视频合并的命令,因为不能读取记录了几个视频的路径的txt文件. 这里我就说直说视频剪切的过程,不说代码,只说lo ... 
- 建设工程造价数据服务云平台(计价BIM)
			经过多次沟通和对招标文件的理解,招标人通过软件平台建立和使用人员库.项目库.材料设备价格库.数据库等四库的真实需求,本着招标人对“成果文件”(指造价.招标代理的计价成果),即“项目库”的计价文件,不打 ... 
- Kali Linux Vmware虚拟机(新手)安装
			准备工作: 1.安装VMware workstation 软件 2.下载好kali linux 的ios系统文件 3.打开电脑的虚拟化支持(Intel VT-x/EPT或AMD-V/RVI(V)) 虚 ... 
- Python-接口自动化(三)
			python基础知识(三) (三)函数 1.函数 函数的语法: def 函数名(): 函数体 a.函数的关键字是def,函数体就是你希望这个函数帮你实现什么功能,函数名命名需要遵循的原则是以小写字母分 ... 
- 【翻译】Open ID Connect---OIDC 是什么东西?
			Welcome to OpenID Connect What is OpenID Connect? OpenID Connect 1.0 is a simple identity layer on t ... 
- FNMP
			Table of Contents 平台 FNMP安装 FNMP配置 php配置 mysql配置 nginx配置 phpMyAdmin配置 平台 freeBSD 12.0 FNMP安装 php安装 v ... 
- Linux 文件系统(一)---虚拟文件系统VFS----超级块、inode、dentry、file
			转自:http://blog.csdn.net/shanshanpt/article/details/38943731 http://elixir.free-electrons.com/linux/v ... 
- spring cloud 随笔记录(1)-
			最近随着微服务的火热,我也开始对我服务进行了解了 毕竟程序员这一行需要及时更新自己的技能,才能更好的生存. 我理解的微服务 项目由多个独立运行的程序组成,每个服务运行在自己的进程中,服务间采用轻量 ... 
