Python阶段总结II
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python阶段总结II相关的知识,希望对你有一定的参考价值。
一、Python的面向对象
-
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
-
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
-
数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
-
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
-
实例变量:定义在方法中的变量,只作用于当前实例的类。
-
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。
-
实例化:创建一个类的实例,类的具体对象。
-
方法:类中定义的函数。
-
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
实例
以下是一个简单的Python类实例:
创建类的实例对象
实例化类其他编程语言中一般用关键字 new,但是在 Python 中并没有这个关键字,类的实例化类似函数调用方式。
以下使用类的名称GasCar和ElecCar 来实例化,并通过 __init__ 方法接受参数。
"创建 GasCar 类的第一个对象" gcar=GasCar("BMW") gcar.fill_fuel(50.0) gcar.run(0) "创建 ElecCar 类的第一个对象" ecar=ElecCar("Tesla") ecar.fill_fuel(60.0) ecar.run(200.0)
完整属性:
class Car: def __init__(self,name): self.name=name self.remain_mile=0 def fill_fuel(self,miles): self.remain_mile=miles def run(self,miles): print (self.name,end=‘:‘) if self.remain_mile>=miles: self.remain_mile-=miles print("run %d miles!"%(miles,)) else: print("fuel out!") class GasCar(Car): def fill_fuel(self,gas): self.remain_mile=gas*6.0 class ElecCar(Car): def fill_fuel(self,power): self.remain_mile=power*3.0 gcar=GasCar("BMW") gcar.fill_fuel(50.0) gcar.run(0) ecar=ElecCar("Tesla") ecar.fill_fuel(60.0) ecar.run(200.0)
执行以上代码输出结果如下:
BMW:run 0 miles!
Tesla:fuel out!
Python的基础重载方法:
__init__ :这是类的构造方法,如果需要自己实现类构造方法那份重载该方法便可
__del__ :析构方法,这是在销毁对象的时候调用的方法,del 对象时会调用该方法
__repr__ : 转化为供解释器读取的形式
__str__ :用于将值转化为适于人阅读的形式,eg print object 这时会调用object对象的__str__方法
__cmp__ :比较器方法,对 int、str 等内置数据类型排序时,Python的 sorted() 按照默认的比较函数 cmp 排序,但是,如果对一组 Student 类的实例排序时,就必须提供我们自己的特殊方法__cmp__()
Python的运算符重载:
class Force: def __init__(self,x,y): self.fx, self.fy=x,y def show(self): print("Force<%s,%s>"% (self.fx, self.fy)) def add(self,force2): x=self.fx +force2.fx y=self.fy +force2.fy return Force(x, y) def __str__(self): return "Force<%r,%r>" % (self.x, self.y) def __mul__(self, n): x, y=self.x+ n, self.y+ n return Force(x, y) def __add__(self, other): x,y=self.x+other.x, self.y+other.y return Force(x, y) def __eq__(self, other): return(self.x == other.x ) and (self.y ==other.y) def __repr__(self): return "Force({0.x!r},{0.y!r})".format(self) f1=Force(0,1) f1.show() f2=Force(3,4) f3=f1.add(f2) f3.show()
执行结果如下:
二、Python的异常处理
1、Python的标准异常
1 BaseException 所有异常的基类 2 SystemExit 解释器请求退出 3 KeyboardInterrupt 用户中断执行(通常是输入^C) 4 Exception 常规错误的基类 5 StopIteration 迭代器没有更多的值 6 GeneratorExit 生成器(generator)发生异常来通知退出 7 StandardError 所有的内建标准异常的基类 8 ArithmeticError 所有数值计算错误的基类 9 FloatingPointError 浮点计算错误 10 OverflowError 数值运算超出最大限制 11 ZeroDivisionError 除(或取模)零 (所有数据类型) 12 AssertionError 断言语句失败 13 AttributeError 对象没有这个属性 14 EOFError 没有内建输入,到达EOF 标记 15 EnvironmentError 操作系统错误的基类 16 IOError 输入/输出操作失败 17 OSError 操作系统错误 18 WindowsError 系统调用失败 19 ImportError 导入模块/对象失败 20 LookupError 无效数据查询的基类 21 IndexError 序列中没有此索引(index) 22 KeyError 映射中没有这个键 23 MemoryError 内存溢出错误(对于Python 解释器不是致命的) 24 NameError 未声明/初始化对象 (没有属性) 25 UnboundLocalError 访问未初始化的本地变量 26 ReferenceError 弱引用(Weak reference)试图访问已经垃圾回收了的对象 27 RuntimeError 一般的运行时错误 28 NotImplementedError 尚未实现的方法 29 SyntaxError Python 语法错误 30 IndentationError 缩进错误 31 TabError Tab 和空格混用 32 SystemError 一般的解释器系统错误 33 TypeError 对类型无效的操作 34 ValueError 传入无效的参数 35 UnicodeError Unicode 相关的错误 36 UnicodeDecodeError Unicode 解码时的错误 37 UnicodeEncodeError Unicode 编码时错误 38 UnicodeTranslateError Unicode 转换时错误 39 Warning 警告的基类 40 DeprecationWarning 关于被弃用的特征的警告 41 FutureWarning 关于构造将来语义会有改变的警告 42 OverflowWarning 旧的关于自动提升为长整型(long)的警告 43 PendingDeprecationWarning 关于特性将会被废弃的警告 44 RuntimeWarning 可疑的运行时行为(runtime behavior)的警告 45 SyntaxWarning 可疑的语法的警告 46 UserWarning 用户代码生成的警告
1 try: 2 <语句> #运行别的代码 3 except <名字>: 4 <语句> #如果在try部份引发了‘name‘异常 5 except <名字>,<数据>: 6 <语句> #如果引发了‘name‘异常,获得附加的数据 7 else: 8 <语句> #如果没有异常发生
三、Python常用的第三方模块知识点
-
PIL的ImageDraw提供了一系列绘图方法,让我们可以直接绘图。 比如要生成字母验证码图片:
1 import Image, ImageDraw, ImageFont, ImageFilter 2 import random 3 4 # 随机字母: 5 def rndChar(): 6 return chr(random.randint(65, 90)) 7 8 # 随机颜色1: 9 def rndColor(): 10 return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255)) 11 12 # 随机颜色2: 13 def rndColor2(): 14 return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127)) 15 16 # 240 x 60: 17 width = 60 * 4 18 height = 60 19 image = Image.new(‘RGB‘, (width, height), (255, 255, 255)) 20 # 创建Font对象: 21 font = ImageFont.truetype(‘Arial.ttf‘, 36) 22 # 创建Draw对象: 23 draw = ImageDraw.Draw(image) 24 # 填充每个像素: 25 for x in range(width): 26 for y in range(height): 27 draw.point((x, y), fill=rndColor()) 28 # 输出文字: 29 for t in range(4): 30 draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2()) 31 # 模糊: 32 image = image.filter(ImageFilter.BLUR) 33 image.save(‘code.jpg‘, ‘jpeg‘);
操作图像
四、Pyhone阶段总结II
通过短短几周的学习,让我对pythone有了基本的认识,让我也认识了解了这门语言,语言与语言之间都有相似的地方,python学起来感觉与Java类似,但也有很大的不同,整个学习过程中,让我体会到了只要认真的学习,就有收获,虽然这门课程的教学过程将要结束,但我知道我学习的脚步还不能停止,我会一直学习关于这方面的只是,提高自己的语言能力。
以上是关于Python阶段总结II的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段