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 相关文章推荐
Python实现的生成自我描述脚本分享(很有意思的程序)
Jul 18 Python
Python计算三角函数之asin()方法的使用
May 15 Python
使用Python操作excel文件的实例代码
Oct 15 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
Nov 29 Python
在双python下设置python3为默认的方法
Oct 31 Python
python 移动图片到另外一个文件夹的实例
Jan 10 Python
解决在pycharm中显示额外的 figure 窗口问题
Jan 15 Python
关于django 1.10 CSRF验证失败的解决方法
Aug 31 Python
Python 词典(Dict) 加载与保存示例
Dec 06 Python
Python有参函数使用代码实例
Jan 06 Python
python3中sys.argv的实例用法
Apr 24 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
May 26 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面向对象概念
2011/11/06 PHP
php空间不支持socket但支持curl时recaptcha的用法
2011/11/07 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
2014/11/22 PHP
javascript 常用功能总结
2012/03/18 Javascript
javascript同页面多次调用弹出层具体实例代码
2013/08/16 Javascript
jQuery提示效果代码分享
2014/11/20 Javascript
Javascript实现颜色rgb与16进制转换的方法
2015/04/18 Javascript
JavaScript:Array类型全面解析
2016/05/19 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
jQuery使用getJSON方法获取json数据完整示例
2016/09/13 Javascript
JSON 数据详解及实例代码分析
2017/01/20 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
JavaScript转换数据库DateTime字段类型方法
2017/06/27 Javascript
node文件批量重命名的方法示例
2017/10/23 Javascript
vue router-link传参以及参数的使用实例
2017/11/10 Javascript
Vue多种方法实现表头和首列固定的示例代码
2018/02/02 Javascript
JQuery使用属性addClass、removeClass和toggleClass实现增加和删除类操作示例
2019/11/18 jQuery
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
详解Python3操作Mongodb简明易懂教程
2017/05/25 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
2017/07/11 Python
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
2019/04/29 Python
Django处理多用户类型的方法介绍
2019/05/18 Python
使用Python制作一个打字训练小工具
2019/10/01 Python
Python使用pycharm导入pymysql教程
2020/09/16 Python
英国知名奢侈品包包品牌:Milli Millu
2016/12/22 全球购物
美国最大的袜子制造商和零售商:Renfro Socks
2017/09/03 全球购物
夏尔巴人登珠峰品牌:Sherpa Adventure Gear
2018/02/08 全球购物
阿迪达斯印尼官方网站:adidas印尼
2020/02/10 全球购物
物业管理员岗位职责范文
2013/11/25 职场文书
小学班干部竞选演讲稿
2014/04/24 职场文书
好听的队名和口号
2014/06/09 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
初中语文教师研修日志
2015/11/13 职场文书
带你了解Java中的ForkJoin
2022/04/28 Java/Android
我国拿下天问一号火星着陆区附近 22 个地理实体命名:平乐、西柏坡、古田、漠河等
2022/04/29 数码科技