python的面向对象
1.面向对象技术简介
2.类定义
2.类对象
4.类的方法
5.继承
6.方法重写
7.类属性与方法
以上就是python3的面向对象的面向对象的中7个核心特性
以下简单举例几个
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
实例变量:定义在方法中的变量,只作用于当前实例的类。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟”是一个(is-a)”关系(例图,Dog是一个Animal)。
实例化:创建一个类的实例,类的具体对象。
方法:类中定义的函数。
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
和其它编程语言相比,Python 在尽可能不增加新的语法和语义的情况下加入了类机制。
Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法。
对象可以包含任意数量和类型的数据。
class UniversityMember:
def __init__(self,name,age):
self.name = name
self.age = age
def getName(self):
return self.name
def getAge(self):
return self.age
class Student(UniversityMember):
def __init__(self,name,age,sno,mark):
UniversityMember.__init__(self,name,age) #注意要显示调用父类构造方法,并传递参数self
self.sno = sno
self.mark = mark
def getSno(self):
return self.sno
def getMark(self):
return self.mark
class Teacher(UniversityMember):
def __init__(self,name,age,tno,salary):
UniversityMember.__init__(self,name,age)
self.tno = tno
self.salary = salary
def getTno(self):
return self.tno
def getSalary(self):
return self.salary
我只举例了一个其他的百度都可以得到
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
python的异常处理
1.错误
2.异常定义
3.常见的异常
4. 异常处理的定义
5. 异常处理的意义
6. .如何进行异常处理
下面我只写第6的一个
try:
...some functions...
except Exception as e:
print(e)
常见的异常
- NameError:尝试访问一个未申明的变量
- ZeroDivisionError:除数为0
- SyntaxError:语法错误
- IndexError:索引超出范围
- KeyError:字典关键字不存在
- IOError:输入输出错误
- AttributeError:访问未知对象属性
8.ValueError:数值错误 - TypeError:类型错误
- AssertionError:断言错误
11.MemoryError:内存耗尽异常 - NotImplementedError:方法没实现引起的异常
- LookupError:键、值不存在引发的异常
使用dir函数可以列出所有的异常 然后使用help函数 全是英文的啦
dir(builtins)
使用一个简单例子讲解 try-except抛异常
try:
num1 = int(input('enter the first number'))
num2 = int(input('enter the second number'))
print(num1/num2)
except ValueError as err:
print('请输入数字')
print(err)
try:
num1 = int(input('enter the first number'))
num2 = int(input('enter the second number'))
print(num1/num2)
except ZeroDivisionError as err:
print('请输入数字')
print(err)
以上是使用try except 列出了计算俩个数相除可能抛出的异常
下面是使用多个except子句处理异常
try:
num1 = int(input('enter the first number'))
num2 = int(input('enter the second number'))
print(num1/num2)
except ZeroDivisionError as err:
print('请输入数字')
print(err)
except ValueError as err:
print('请输入数字')
print(err)
使用一个except处理多个异常的例子
try:
num1 = int(input('enter the first number'))
num2 = int(input('enter the second number'))
print(num1/num2)
except (ZeroDivisionError, ValueError) :
print('请输入符合除法规则的数字')
空except
try:
num1 = int(input('enter the first number'))
num2 = int(input('enter the second number'))
print(num1/num2)
except Exception as err:
print(err)
常用的第三方模块 在这部分我们学习的策略是用到了再去学
有常见的requests bs4 等等模块在网络爬虫上的模块
图像处理的第三方模块
PIL(Python Imaging Library Python,图像处理类库)提供了通用的图像处理功能
使用PIL 生成一个验证码的例子
生成验证码
from PIL import Image ,ImageDraw,ImageFont ,ImageFilter
import random
def rndChar():
return chr(random.randint(65,90))
def rndColor():
return (random.randint(64,255)),
random.randint(64,255),
random.randint(64,255)
def rndColor2():
return(random.randint(32,127),
random.randint(32,127),
random.randint(32,127)
)
width = 60*4
height = 60
image = Image.new('RGB',(width,height),(255,255,255))
font = ImageFont.truetype('arial.ttf',36)
draw = ImageDraw.Draw(image)
for x in range(width):
for y in range(height):
draw.point((x,y),fill=rndColor())
for t in range(width):
draw.text((60*t +10,10),rndChar(),font= font,fill=rndColor2())
image = image.filter(ImageFilter.BLUR)
image.save('code.jpg','jpeg')
image.show()
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++====
nmupy
import numpy as np
a = np.array([12,3,4,5,6]) #
print(a)
print(a[4])
print(a[-1])
切片操作
print(a[1:4:2])
print(a[-3:-1])
对数组元素进行累积和
print(a.cumsum())
matplotlib
能够创建多数类型的图表,如条形图,散点图,条形图,饼图,堆叠图,3D 图和地图图表
下面是使用 matplotlib 创建的一个直方图
import matplotlib.pyplot as plt
plt.bar([1,3,5,7,9],[5,2,7,8,2], label = 'Example one')
plt.bar([2,4,6,8,10],[8,6,2,3,4],label = 'example two ',color = 'g')
plt.legend() #生成默认图例
plt.xlabel('bar number')
plt.ylabel('bar height')
plt.title('hhh')
plt.show()
import matplotlib.pyplot as plt
import numpy as np
添加标题,坐标轴标记和图例
x = np.linspace(0,2 * np.pi,50)
plt.plot(x,np.sin(x),'r-x',label = 'Sin(x)')
plt.plot(x,np.cos(x),'g-^',label = 'Cos(x)')
plt.legend()#展示图例
plt.xlabel('Rads') # 给 x 轴添加标签
plt.ylabel('Amplitude') #给y 轴添加标签
plt.title('sin and cos')
plt.show()
+++++++++++++++++++++++++++++++++++
接下来学习的是 实现的简单爬虫的库
requests BeautifulSoup
首先是使用 pip install requests
pip install BeautifulSoup
Requests 安装的小测
import requests
r = requests.get('http://www.baidu.com')
print(r.status_code)
如果返回的状态码是200 则安装成功
爬虫的基本框架
import requests
def get_html_text(url):
try:
r = requests.get(url,timeout = 30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except Exception as err:
return err
if name == 'main':
url = 'http://www.baidu.com'
print(get_html_text(url))
获取
r = requests.head('http://httpbin.org/get')
print(r.headers)
BeautifulSoup 安装检测
import requests
from bs4 import BeautifulSoup
r = requests.get('http://python123.io/ws/demo.html')
r.encoding = r.apparent_encoding
html =r.text
soup = BeautifulSoup(html,'lxml')
print(soup.prettify()) # 将网页的源代码格式化输出
tag元素的简单用例
import requests
from bs4 import BeautifulSoup
r = requests.get('http://python123.io/ws/demo.html')
r.encoding = r.apparent_encoding
html =r.text
soup = BeautifulSoup(html,'lxml')
print(soup.prettify())
print(soup.title)
tag = soup.a
print(tag.attrs)
分别遍历子孙节点
for child in soup.body.children:
print(child)
for i in range(10):
print('@@@',end='')
for child in soup.body.descendants:
print(child)
下面有一个小例子 爬取中国的排名的爬虫
import requests
from bs4 import BeautifulSoup
import bs4
def getHTMLText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
def fillUnivList(ulist, html):
soup = BeautifulSoup(html, "html.parser")
for tr in soup.find('tbody').children:
if isinstance(tr, bs4.element.Tag):
tds = tr('td')
ulist.append([tds[0].string, tds[1].string, tds[3].string])
def printUnivList(ulist, num):
tplt = "{0:10} {1:{3}10} {2:^10}"
print(tplt.format("排名","学校名称","总分",chr(12288)))
for i in range(num):
u=ulist[i]
print(tplt.format(u[0],u[1],u[2],chr(12288)))
def main():
uinfo = []
url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html'
html = getHTMLText(url)
fillUnivList(uinfo, html)
printUnivList(uinfo, 20) # 20 univs
main()