第11關(guān) 編程思維:如何debug-殺死那只“機(jī)”生蟲 課程目標(biāo) 課程重要內(nèi)容重現(xiàn) 出bug的四種常見類型 1)line x代表這個bug出現(xiàn)在第x行,在Debug的時候,可以優(yōu)先從第x行開始檢查; 2)^代表bug發(fā)生的位置,這里指出的位置是第二行末尾; 3)錯誤類型,如SyntaxError指的是語法錯誤。對英文不熟悉的直接復(fù)制查百度。 粗心
知識不熟練
思路不清
遇到關(guān)鍵步驟時print出來,看是否達(dá)到我們所期望的結(jié)果,以此來揪出錯誤的那一步。 不明白哪不對的時候,使用#號把后面的代碼注釋掉,一步一步運行,可以幫助排除錯誤。 被動掉坑
指有時候你的代碼邏輯上并沒有錯,但可能因為用戶的錯誤操作或者是一些“例外情況”而導(dǎo)致程序崩潰。例如: age = int(input('你今年幾歲了?')) if age < 18: print('不可以喝酒噢') #當(dāng)輸入的不是純數(shù)字時,會報錯ValueError:invalid literal for int() with base 10 : #因為,int()函數(shù)不能接受非數(shù)字的字符串。 第12-13關(guān) 類與對象-我有一個“機(jī)器人” 課程目標(biāo) 了解何為對象
區(qū)分變量與類屬性,函數(shù)與類方法
掌握類的實例化及初始化函數(shù)
熟練繼承與子類定制
課程難點 初始化函數(shù)的優(yōu)雅改寫
多層繼承與多重繼承的優(yōu)先級
課程重要內(nèi)容重現(xiàn) 一、類 1、類的創(chuàng)建 1)類名首字母要大寫 2)為區(qū)別普通函數(shù),在類中賦值的變量叫做類屬性(attribute),類中定義的函數(shù)叫做類方法(method) 3)實例方法是指類中參數(shù)帶self的函數(shù),是類方法的一種形式,也是最常見的用法。 4)類的創(chuàng)建:class語句 5)類屬性的創(chuàng)建:賦值語句 6)實例方法的創(chuàng)建:def method1(self): 2、實例化 剛被創(chuàng)造出來的實例與類一模一樣。 格式 : 實例名=類名() 3、調(diào)用類的屬性和方法 1)當(dāng)實例一被創(chuàng)建出來,就可以調(diào)用類中的屬性和方法。參數(shù)self在定義時不能丟,在調(diào)用時要忽略。 格式: 實例名.屬性 和 實例名.方法 class Computer: screen = True def start(self): print('電腦正在開機(jī)中……')
my_computer = Computer()#實例化 print(my_computer.screen)#調(diào)用類屬性 my_computer.start()#調(diào)用類方法 2)類的內(nèi)部調(diào)用類屬性 實例名person會像參數(shù)一樣傳給self,替換掉self,第六行的self.name等價于person.name,然后person.name相當(dāng)于調(diào)用了第2行的類屬性name。也就是說,self起到提示傳參位置的作用,當(dāng)在類的方法內(nèi)部想調(diào)用類屬性或其他方法時,就要采用self.屬性名或self.方法名的格式。(相當(dāng)于改變了作用域) class Chinese: name = '吳楓' # 類屬性name def say(self): print(self.name + '是中國人')
person = Chinese() # 創(chuàng)建Chinese的實例person person.say() # 調(diào)用實例方法 二、初始化函數(shù) 在初始化方法內(nèi)部完成類屬性的創(chuàng)建,為類屬性設(shè)置初始值,這樣類中的其他方法就能直接、隨時調(diào)用。不需要再調(diào)用__init__()。 class chinese: def __init__(self, name, birth, region) self.name = name # self.name = '吳楓' self.birth = birth # self.birth = '廣東' self.region = region # self.region = '深圳' def born(self): print(self.name + '出生在' + self.birth) def live(self): print(self.name + '居住在' + self.region) person = Chinese('吳楓','廣東','深圳') # 傳入初始化方法的參數(shù) person.born() person.live() 三、繼承 子類也可以在繼承的基礎(chǔ)上進(jìn)行個性化的定制,包括:(1)創(chuàng)建新屬性、新方法;(2)修改繼承到的屬性或方法。 格式:class A(B):,表示A繼承了類B。 子類繼承的屬性和方法,也會傳遞給子類創(chuàng)建的實例。很多類在創(chuàng)建時也不帶括號,如class A:實際上,class A:在運行時相當(dāng)于class A(object):。而object,是所有類的父類,我們將其稱為根類。 1)多層繼承 多層繼承(縱向)時,子類創(chuàng)建的實例可調(diào)用所有層級父類的屬性和方法。 2)多重繼承 多重繼承(橫向)時,根據(jù)與子類的相關(guān)順序從左往右排,A是B,C,D三個父類的子類,但是在調(diào)用類方法和類屬性時,優(yōu)先從B中找,找不到再去C(就近原則)。 class C0: name = 'C0' class C2(C0): num = 2 class C1: num = 1 class C3: name = 'C3' class C4(C1,C2,C3): pass ins = C4() print(ins.name) 一直 #打印出C0,即會沿著C2父類一直往其父類里找,直到完全找不到再去C3找。 print(ins.num) #打印出1 四、定制 五、其他
|