標籤:警告 alt board iter war 相同 sla __del__ 變數
一、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.0class ElecCar(Car): def fill_fuel(self,power): self.remain_mile=power*3.0gcar=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 Assert 陳述式失敗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常用的第三方模組知識點 基本上,所有的第三方模組都會在PyPI - the Python Package Index上註冊,只要找到對應的模組名字,即可用easy_install或者pip安裝。
- 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 * 418 height = 6019 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