Python基础—13-面向对象及异常处理
<h1 id="面向对象及异常处理" data-source-line="1">面向对象及异常处理 总结:
算术运算符重载
=
</span><span style="color: #008000">#</span><span style="color: #008000"> 对象出现在'+'左边时会自动触发</span>
<span style="color: #0000ff">def</span> <span style="color: #800080">__add__</span><span style="color: #000000">(self,other):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">__add__</span><span style="color: #800000">'</span><span style="color: #000000">)
</span><span style="color: #0000ff">return</span> self.num +<span style="color: #000000"> other
</span><span style="color: #008000">#</span><span style="color: #008000"> 对象出现在'+'右边是会自动触发</span>
<span style="color: #0000ff">def</span> <span style="color: #800080">__radd__</span><span style="color: #000000">(self,other):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">__radd__</span><span style="color: #800000">'</span><span style="color: #000000">)
</span><span style="color: #0000ff">return</span> self.num +<span style="color: #000000"> other
</span><span style="color: #008000">#</span><span style="color: #008000"> +=运算时会自动触发,没有时会触发 __add__</span>
<span style="color: #0000ff">def</span> <span style="color: #800080">__iadd__</span><span style="color: #000000">(self,other):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">__iadd__</span><span style="color: #800000">'</span><span style="color: #000000">)
</span><span style="color: #0000ff">return</span> Number(self.num +<span style="color: #000000"> other)
n = Number(100<span style="color: #000000">)
加法:、、、、、、、、、、
关系运算符重载 >:
=:
<:
<=:
==:
!=:
示例 =
</span><span style="color: #0000ff">def</span> <span style="color: #800080">__gt__</span><span style="color: #000000">(self,other):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">__gt__</span><span style="color: #800000">'</span><span style="color: #000000">)
</span><span style="color: #0000ff">return</span> self.num > 200
<span style="color: #0000ff">def</span> <span style="color: #800080">__lt__</span><span style="color: #000000">(self,other):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">__lt__</span><span style="color: #800000">'</span><span style="color: #000000">)
</span><span style="color: #0000ff">return</span> self.num <<span style="color: #000000"> other
</span><span style="color: #0000ff">def</span> <span style="color: #800080">__eq__</span><span style="color: #000000">(self,other):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">__eq__</span><span style="color: #800000">'</span><span style="color: #000000">)
</span><span style="color: #0000ff">return</span> self.num ==<span style="color: #000000"> other
</span><span style="color: #008000">#</span><span style="color: #008000"> 当没有此方法时,使用!=也会触发__eq__方法</span>
<span style="color: #0000ff">def</span> <span style="color: #800080">__ne__</span><span style="color: #000000">(self,other):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">__ne__</span><span style="color: #800000">'</span><span style="color: #000000">)
</span><span style="color: #0000ff">return</span> self.num !=<span style="color: #000000"> other
n = Number(100<span style="color: #000000">) <span style="color: #008000">#<span style="color: #008000"> print(n > 200)<span style="color: #008000"> <span style="color: #008000"> print(200 > n)<span style="color: #008000"><span style="color: #008000"> print(200 == n)<span style="color: #0000ff">print(200 != n)
引用计数
函数传参
深浅拷贝 (p1 =<span style="color: #000000"> Person()
p2 =<span style="color: #000000"> p1 <span style="color: #0000ff">print<span style="color: #000000">(id(p1)) <span style="color: #0000ff">del<span style="color: #000000"> p1 <span style="color: #0000ff">def<span style="color: #000000"> test(m): <span style="color: #008000">#<span style="color: #008000"> n = 100 test(n) <span style="color: #0000ff">import<span style="color: #000000"> copy lt = [1,2,[3,4<span style="color: #000000">]] <span style="color: #008000">#<span style="color: #008000"> 浅拷贝,只拷贝对象本身,不拷贝对象中的元素<span style="color: #008000"> <span style="color: #008000"> lt2 = lt.copy()<span style="color: #008000"><span style="color: #008000"> 浅拷贝lt2 =<span style="color: #000000"> copy.copy(lt) <span style="color: #008000">#<span style="color: #008000"> 深拷贝:不但拷贝对象本身,还拷贝对象中的元素 <span style="color: #0000ff">print<span style="color: #000000">(id(lt))
说明:数据持久化存储方案,普通文件、序列化、数据库 示例: <span style="color: #0000ff">class<span style="color: #000000"> Person:
<span style="color: #0000ff">def <span style="color: #800080">init<span style="color: #000000">(self,name,age): self.name =<span style="color: #000000"> name self.age =<span style="color: #000000"> age
xiaoming = Person(<span style="color: #800000">'<span style="color: #800000">xiaoming<span style="color: #800000">',20<span style="color: #000000">) <span style="color: #008000">#<span style="color: #008000"> s = pickle.dumps(xiaoming)<span style="color: #008000"> <span style="color: #008000"> print(s)<span style="color: #008000">#<span style="color: #008000"> 从字节流中提取对象<span style="color: #008000"> <span style="color: #008000"> xm = pickle.loads(s)<span style="color: #008000">#<span style="color: #008000"> print(xm)<span style="color: #008000"> <span style="color: #008000"> 保存到文件中<span style="color: #008000"><span style="color: #008000"> fp = open('data.txt','wb')<span style="color: #008000">#<span style="color: #008000"> pickle.dump(xiaoming,fp)<span style="color: #008000"> <span style="color: #008000"> 从文件中获取对象<span style="color: #000000">
相关概念
异常处理
异常语法: (
3/
(<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">其他内容<span style="color: #800000">')
多个异常 <span style="color: #0000ff">try<span style="color: #000000">: 完整结构(else-finally) (
(
(
()
抛出异常: (
Exception((<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">OVER<span style="color: #800000">')
异常嵌套(try-except结构中再次使用try-except结构) (( Exception((( Exception((((<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">热情满满的开始一天的工作<span style="color: #800000">')
自定义异常类(需要继承自官方的异常基类Exception)
=
</span><span style="color: #0000ff">def</span> <span style="color: #800080">__str__</span><span style="color: #000000">(self):
</span><span style="color: #0000ff">return</span><span style="color: #000000"> self.msg
</span><span style="color: #008000">#</span><span style="color: #008000"> 特定异常标准处理方案</span>
<span style="color: #0000ff">def</span><span style="color: #000000"> deal(self):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">处理特定的自定义异常</span><span style="color: #800000">'</span><span style="color: #000000">)
<span style="color: #0000ff">try<span style="color: #000000">: 特殊场景
,= fp.read(5
virtualenv
|