Python3简明教程四
2017-09-29 本文已影响16人
忘尘无憾
这部分主要说明Python3的类、模块等。
1. 类
定义类的语法
class nameoftheclass(parent_class):
statement1
statement2
statement3
-
__init__
方法
类的实例化使用函数符号。类似于构造函数。 - 继承
当一个类继承另一个类时,它将继承父类的所有功能(如变量和方法)。 - 多继承
一个类可以继承自多个类,具有父类的所有变量和方法
class MyClass(Parentclass1, Parentclass2,...):
def __init__(self):
Parentclass1.__init__(self)
Parentclass2.__init__(self)
...
...
- 删除对象
使用关键字 del 来删除对象。del 实际上使对象的引用计数减少一,当对象的引用计数变成零的时候,垃圾回收器会删除这个对象。 - 属性(attributes)读取方法
在 Python 里不要使用属性读取方法,直接使用即可。
>>> std.name = "Python"
>>> print(std.name)
Python
- Properties 装饰器
@property 装饰器就是负责把一个方法变成属性调用。
本质上,装饰器也是一种高阶函数
2. 模块
当人们编写大型程序的时候会倾向于将代码分为多个不同的文件以便使用,调试以及拥有更好的可读性。在 Python 中使用模块来到达这些目的。模块是包括 Python 定义和声明的文件。文件名就是模块名加上 .py 后缀。
通过全局变量 __name__
可以得到模块的模块名(一个字符串)。
- 导入模块
也可以从模块中导入指定的函数
import module # 导入模块
from module import xxxfun1, xxxfun2 # 导入模块中指定的函数
from module import * # 导入模块中的所有定义,不推荐
- 包
含有__init__.py
文件的目录可以用来作为一个包,目录里的所有 .py 文件都是这个包的子模块。
可以使用 touch 命令创建一个空的__init__.py
文件 - os模块
os模块提供了与操作系统相关的功能。
-- getuid() 函数返回当前进程的有效用户 id。
-- getpid() 函数返回当前进程的 id。
-- getppid() 返回父进程的 id。
-- uname() 函数返回识别操作系统的不同信息。在 Linux 中它返回的详细信息可以从 uname -a 命令得到。uname() 返回的对象是一个元组,(sysname, nodename, release, version, machine)。
-- getcwd() 函数返回当前工作目录。
-- chdir(path) 则是更改当前目录到 path - Requests 模块
Requests是一个第三方 Python 模块,可以使用pip3安装该模块。
pip3 install requests
- Requests 模块的get() 方法获取任意一个网页
>>> import requests
>>> req = requests.get('https://www.baidu.com')
>>> req.status_code
200
>>> req.text #可获取html网页文档
- 从指定的 URL 中下载文件的程序
#!/usr/bin/env python3
import os
import os.path
import requests
def download(url):
'''从指定的 URL 中下载文件并存储到当前目录
:arg url: 要下载的文件的 URL
'''
req = requests.get(url)
# 首先我们检查是否存在文件
if req.status_code == 404:
print('No such file found at %s' % url)
return
filename = url.split('/')[-1]
with open(filename, 'wb') as fobj:
fobj.write(req.content)
print("Download over.")
if __name__ == '__main__':
url = input('Enter a URL: ')
download(url)
-
if __name__ == '__main__'
从上可以知道这条语句,该语句的作用是只有在当前模块名为__main__
的时候(即作为脚本执行的时候)才会执行此 if 块内的语句。换句话说,当此文件以模块的形式导入到其它文件中时,if 块内的语句并不会执行。