Python3中类、模块、错误与异常、文件的简易教程


Posted in Python onNovember 20, 2017

和旧版的Python 2.7教程相比,新增内容包括:

  • 新增命名关键字参数的使用;
  • 新增StringIO和BytesIO;
  • 新增datetime的使用;
  • 新增urllib的使用;
  • 新增枚举类型的使用;
  • 新增virtualenv的使用;
  • 新增asyncio编程;
  • 新增aiohttp编程;
  • 实战的Web App已完全基于asyncio重写。

本文将详细给大家介绍Python3中类、模块、错误与异常、文件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。


面向对象设计思想是 Class 抽象的,Instance 一个个具体的 Class,比如学生是抽象的 Class,而张三李四就是一个个具体学生。

定义

Class 大驼峰命名法。仅供?炔坑玫 Class,名称前会加一个底线。

类定义一般格式:

class Student:
 pass
# 或者
class Developer(object):
 pass

object 表示该类是从哪个类继承下来的,object 是最终的父类。

class Developer(object):
 # 定义类属性
 name = 'WuXiaolong'
 site = 'http://wuxiaolong.me/'
 # 变量名两个下划线开头,定义私有属性, 这样在类外部无法直接进行访问,类的私有方法也是如此
 __sex = 0
 # 定义构造方法
 def __init__(self, name, site, sex):
 self.name = name
 self.site = site
 self.__sex = sex
 # 类方法
 def get_sex(self):
 return self.__sex
 def set_sex(self, sex):
 self.__sex = sex
# 调用:
if __name__ == '__main__':
 # 实例化类
 developer = Developer('wxl', 'http://wuxiaolong.me/', 1) # 实例化成变量
 print(developer.site, developer.get_sex()) # 访问类的属性和方法

注意:以单下划线开头的表示的是 protected 类型的变量或方法,即保护类型,只能允许其本身与子类进行访问,不能用于 from module import *。

单继承

class Developer(object):
 # 定义类属性
 name = 'WuXiaolong'
 site = 'http://wuxiaolong.me/'
 # 变量名两个下划线开头,定义私有属性, 这样在类外部无法直接进行访问,类的私有方法也是如此
 __sex = 0
 # 定义构造方法
 def __init__(self, name, site, sex):
 self.name = name
 self.site = site
 self.__sex = sex
 # 类方法
 def get_sex(self):
 return self.__sex
 def set_sex(self, sex):
 self.__sex = sex
# 单继承
class AndroidCoder(Developer):
 coder_id = 1024
 # 定义构造方法
 def __init__(self, name, site, sex, coder_id):
 # 调用父类构造方法
 # Developer.__init__(self, name, site, sex) # 老办法
 super(AndroidCoder, self).__init__(name, site, sex) # 采用新式
 self.coder_id = coder_id
 # 重写父类的方法
 def set_sex(self, sex):
 self.__sex = sex
 print('这是个秘密')
 def get_sex(self):
 return self.__sex
# 调用:
if __name__ == '__main__':
 # 单继承
 androidCoder = AndroidCoder('wxl', 'http://wuxiaolong.me/', 1, 520)
 print(androidCoder.set_sex(2))

注意:super 继承,要求最顶层的父类一定要继承于object,这样就可以利用 super() 函数来调用父类的 init() 等函数。

多继承

B 继承 A,C 继承 B

以上面的单继承为例,AndroidCoder 继承了 Developer,现在让 PythonCoder 继承 AndroidCoder:

# 多继承,B 继承 A,C 继承 B
class PythonCoder(AndroidCoder):
 # 定义构造方法
 def __init__(self, name, site, sex, coder_id):
 # 调用父类构造方法
 super(PythonCoder, self).__init__(name, site, sex, coder_id)
# 调用:
if __name__ == '__main__':
 pythonCoder = PythonCoder('wxl', 'http://wuxiaolong.me/', 1, 1024)
 print(androidCoder.get_sex())

注意:多继承圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,Python 会调用子类的;

Z 继承 X、Y

class JavaCoder(object):
 java_id = 1
 # 定义构造方法
 def __init__(self, java_id):
 self.java_id = java_id
 print('来自JavaCoder')
class FullStackCoder(AndroidCoder, JavaCoder):
 # 定义构造方法
 def __init__(self, name, site, sex, coder_id):
 # 调用父类构造方法
 super(FullStackCoder, self).__init__(name, site, sex, coder_id)
 JavaCoder.__init__(self, coder_id) # 这里需要使用老办法
# 调用:
if __name__ == '__main__':
 fullStackCoder = FullStackCoder('wxl', 'http://wuxiaolong.me/', 1, 1024)

模块

Python 模块跟 Java 里包概念差不多,使用 import 语句导入。

import 语句

比如在类环节新建的文件名为 wxl_class.py,想在另个文件使用:

## 导入模块
import wxl_class
developer = wxl_class.Developer('wxl', 'http://wuxiaolong.me/', 1) # 实例变量
print(developer.site)

问题:发现打印了两次,原来 wxl_class.py 没有写 __name__ 属性。

__name__ 属性

每个模块都有一个 __name__ 属性,当其值是'__main__'时,表明该模块自身在运行,因此在 wxl_class.py 加上 __main__就好了。

if __name__ == '__main__':
 pass

from…import 语句

从模块导入指定内容或者 * 代表全部:

from wxl_def import hello1
m = hello1(666, 999)

作用域

正常的函数和变量名是公开的(public),可以被直接引用;

以两个下划线开头,定义私有(private), 这样在类外部无法直接进行访问;

以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *。

标准库

Python 本身带着一些标准的模块库,比如 json 模块。

Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数:

json.dumps(): 对数据进行编码;

json.loads(): 对数据进行解码。

JSON 类型与 Python 类型对应关系:

Python3中类、模块、错误与异常、文件的简易教程

import json
# Python 字典类型转换为 JSON 对象
python_data = {'id': 1024, 'name': 'wxl', 'site': 'http://wuxiaolong.me/'}
print(json.dumps(python_data)) # 打印:{"id": 1024, "name": "wxl", "site": "http://wuxiaolong.me/"}
# 将 JSON 对象转换为 Python 字典
json_data = '{"id": 1024, "name": "wxl", "site": "http://wuxiaolong.me/"}'
print(json.loads(json_data)) # 打印:{'id': 1024, 'name': 'wxl', 'site': 'http://wuxiaolong.me/'}

第三方模块

在 Python 中,安装第三方模块,是通过包管理工具 pip 完成的。

1、安装 pip

sudo easy_install pip

2、比如安装 PyMySQL 模块来连接数据库,Python 3.x:

pip3 install PyMySQL

返回:

Collecting PyMySQL
 Using cached PyMySQL-0.7.11-py2.py3-none-any.whl
Installing collected packages: PyMySQL
Successfully installed PyMySQL-0.7.11

升级 pip 到最新版本

python -m pip install --upgrade pip

错误和异常

Java 中捕获异常是用的 try catch finally,Python 是用的 try…except…finally…:

try:
 name = 'wxl'
 print(int(name))
except ValueError as e: # 所有的错误类型都继承自BaseException
 print(e)
finally:
 print('finally')

文件

Python 内置了读写文件的函数,一般分为 3 步:

1、open() 函数,打开一个文件对象;

2、调用 read() 方法读取文件内容;

3、调用 close() 方法关闭文件。

写文件

桌面新建一个空白 Python3Learn.txt 文件:

def write_file():
 try:
  f = open('/Users/wuxiaolong/Desktop/Python3Learn.txt', 'w') # 标示符'w'表示写
  f.write('Hello, Python')
 except BaseException as e:
  print(e)
 finally:
  if f:
   f.close()

读文件

def read_file():
 try:
  f = open('/Users/wuxiaolong/Desktop/Python3Learn.txt', 'r') # 标示符'r'表示读
  # print(f.read()) # read()会一次性读取文件的全部内容
  print(f.readlines()) # 每次读取一行内容,返回list
 except BaseException as e:
  print(e)
 finally:
  if f:
   f.close()

读取二进制文件

比如图片、视频等等,桌面随便搞张 Python3Learn.png:

def read_byte_file():
 try:
  f = open('/Users/wuxiaolong/Desktop/Python3Learn.png', 'rb') # 标示符'rb'表示读
  print(f.read()) # read()会一次性读取文件的全部内容
  # print(f.readlines()) # 每次读取一行内容,返回list
 except BaseException as e:
  print(e)
 finally:
  if f:
   f.close()

字符编码

encoding 参数:读取非 UTF-8 编码的文本文件;errors 参数:遇到编码错误后如何处理,最简单的方式是直接忽略。

f = open('/Users/wuxiaolong/Desktop/Python3Learn.txt', 'r', encoding='gbk', errors='ignore')

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
linux环境下安装pyramid和新建项目的步骤
Nov 27 Python
python类装饰器用法实例
Jun 04 Python
Python爬取当当、京东、亚马逊图书信息代码实例
Dec 09 Python
详解python的ORM中Pony用法
Feb 09 Python
解决python3捕获cx_oracle抛出的异常错误问题
Oct 18 Python
解决Django layui {{}}冲突的问题
Aug 29 Python
30秒学会30个超实用Python代码片段【收藏版】
Oct 15 Python
关于ResNeXt网络的pytorch实现
Jan 14 Python
python字符串下标与切片及使用方法
Feb 13 Python
Python类和实例的属性机制原理详解
Mar 21 Python
python实现控制台输出颜色
Mar 02 Python
Requests什么的通通爬不了的Python超强反爬虫方案!
May 20 Python
Python实现将HTML转换成doc格式文件的方法示例
Nov 20 #Python
python中学习K-Means和图片压缩
Nov 20 #Python
深入理解Python中的super()方法
Nov 20 #Python
python实现读取excel写入mysql的小工具详解
Nov 20 #Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
Nov 20 #Python
python Matplotlib画图之调整字体大小的示例
Nov 20 #Python
python cx_Oracle的基础使用方法(连接和增删改查)
Nov 19 #Python
You might like
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
2011/12/28 PHP
PHP也能干大事之PHP中的编码解码详解
2015/04/20 PHP
降低PHP Redis内存占用
2017/03/23 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
2018/05/12 PHP
一些有关检查数据的JS代码
2006/09/07 Javascript
用JS实现一个页面多个css样式实现
2008/05/29 Javascript
javascript椭圆旋转相册实现代码
2012/01/16 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
15条JavaScript最佳实践小结
2013/08/09 Javascript
AngularJs IE Compatibility 兼容老版本IE
2016/09/01 Javascript
chrome浏览器如何断点调试异步加载的JS
2016/09/05 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
jQuery滚动监听实现商城楼梯式导航效果
2017/03/06 Javascript
JS设置手机验证码60s等待实现代码
2017/06/14 Javascript
json数据传到前台并解析展示成列表的方法
2018/08/06 Javascript
jQuery实现当拉动滚动条到底部加载数据的方法分析
2019/01/24 jQuery
vue.config.js常用配置详解
2019/11/14 Javascript
VSCode Vue开发推荐插件和VSCode快捷键(小结)
2020/08/08 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
[11:57]《一刀刀一天》第十七期:TI中国军团加油!
2014/05/26 DOTA
python使用正则表达式的search()函数实现指定位置搜索功能
2017/11/10 Python
python实现连续图文识别
2018/12/18 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
django使用xadmin的全局配置详解
2019/11/15 Python
python FTP批量下载/删除/上传实例
2019/12/22 Python
python中的逆序遍历实例
2019/12/25 Python
小 200 行 Python 代码制作一个换脸程序
2020/05/12 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
Nike瑞士官网:Nike CH
2021/01/18 全球购物
前台文员职责范本
2014/03/07 职场文书
关于十八大的演讲稿
2014/09/15 职场文书
销售内勤岗位职责
2015/02/10 职场文书
英语导游词
2015/02/13 职场文书
浅谈Python numpy创建空数组的问题
2021/05/25 Python
Golang生成Excel文档的方法步骤
2021/06/09 Golang
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL