




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《Python程序設(shè)計(jì)》?精品課件合集單元6類(lèi)的定義與使用Python程序設(shè)計(jì)知識(shí)入門(mén)知識(shí)要點(diǎn)1.Python3面向?qū)ο蠹夹g(shù)簡(jiǎn)介2.Python身份運(yùn)算符1.Python3面向?qū)ο蠹夹g(shù)簡(jiǎn)介(1)類(lèi)(Class)在Python中,類(lèi)是一個(gè)抽象概念,例如學(xué)生、職工、教師、學(xué)校、班級(jí)、圖書(shū)、電子產(chǎn)品、手機(jī)、電視機(jī)、西裝等客觀實(shí)體都可以在程序中定義為對(duì)應(yīng)的類(lèi),在類(lèi)中,可以定義每個(gè)對(duì)象共有的屬性和方法,類(lèi)是用來(lái)描述具有相同的屬性和方法的對(duì)象的集合。(2)實(shí)例化(3)對(duì)象創(chuàng)建一個(gè)類(lèi)的實(shí)例,即創(chuàng)建類(lèi)的具體對(duì)象,也稱(chēng)為實(shí)例化。對(duì)象是事物存在的實(shí)體,類(lèi)定義完成后就會(huì)產(chǎn)生一個(gè)類(lèi)對(duì)象。對(duì)類(lèi)進(jìn)行實(shí)例化操作,創(chuàng)建一個(gè)類(lèi)的實(shí)例,就會(huì)產(chǎn)生類(lèi)的實(shí)例對(duì)象,實(shí)例對(duì)象是根據(jù)類(lèi)的模板生成的一個(gè)內(nèi)存實(shí)體,有確定的數(shù)據(jù)與內(nèi)存地址。1.Python3面向?qū)ο蠹夹g(shù)簡(jiǎn)介(4)數(shù)據(jù)成員類(lèi)主要包括兩類(lèi)數(shù)據(jù)成員:屬性和方法。類(lèi)定義了集合中每個(gè)對(duì)象共有的屬性和方法。在類(lèi)的聲明中,屬性是用變量來(lái)表示的,方法是指在類(lèi)中定義的函數(shù)。(5)類(lèi)屬性(6)實(shí)例屬性實(shí)例屬性用來(lái)描述根據(jù)類(lèi)創(chuàng)建的實(shí)例對(duì)象,通過(guò)實(shí)例屬性或者self變量可以給實(shí)例綁定屬性。實(shí)例屬性是指定義在方法內(nèi)部的屬性,通常在類(lèi)的__init__()方法內(nèi)部定義,在各自實(shí)例對(duì)象的內(nèi)存中都保存一份,只能通過(guò)實(shí)例名稱(chēng)而不能通過(guò)類(lèi)名稱(chēng)訪問(wèn)實(shí)例屬性。也可以通過(guò)實(shí)例名稱(chēng)修改實(shí)例屬性值。描述類(lèi)的屬性稱(chēng)為類(lèi)屬性,它屬于類(lèi)。如果類(lèi)本身需要綁定一個(gè)屬性,可以直接在類(lèi)中定義屬性,這種屬性是類(lèi)屬性,歸類(lèi)所有。類(lèi)屬性在內(nèi)存中只有一份,所有實(shí)例對(duì)象公用,類(lèi)的所有實(shí)例都可以訪問(wèn)。1.Python3面向?qū)ο蠹夹g(shù)簡(jiǎn)介(7)方法方法是指類(lèi)中定義的函數(shù),通常也分為實(shí)例方法和類(lèi)方法。實(shí)例方法是在類(lèi)中使用def關(guān)鍵字定義的函數(shù),至少有一個(gè)參數(shù),一般以名為“self”的變量作為參數(shù)(使用其他名稱(chēng)也可以),而且需要作為第一個(gè)參數(shù),實(shí)例方法一般使用實(shí)例名稱(chēng)調(diào)用。類(lèi)方法是屬于類(lèi)的方法,這種方法要使用@classmethod來(lái)修飾,其第一個(gè)參數(shù)一般命名為cls(也可以是別的名稱(chēng))。類(lèi)方法一般使用類(lèi)名稱(chēng)調(diào)用。(8)繼承(9)方法重寫(xiě)如果從父類(lèi)繼承的方法不能滿(mǎn)足子類(lèi)的需求,可以對(duì)其進(jìn)行改寫(xiě),這個(gè)過(guò)程叫方法的覆蓋(Override),也稱(chēng)為方法的重寫(xiě)。繼承是指派生類(lèi)(DerivedClass)繼承父類(lèi)(BaseClass)的屬性和方法,允許把一個(gè)派生類(lèi)的對(duì)象作為一個(gè)父類(lèi)對(duì)象。2.Python身份運(yùn)算符運(yùn)算符說(shuō)明實(shí)例isis是判斷兩個(gè)標(biāo)識(shí)符是不是引用自同一個(gè)對(duì)象xisy,類(lèi)似id(x)==id(y)。如果引用的是同一個(gè)對(duì)象則返回True,否則返回Falseisnotisnot是判斷兩個(gè)標(biāo)識(shí)符是不是引用自不同對(duì)象xisnoty,類(lèi)似id(a)!=id(b)。如果引用的不是同一個(gè)對(duì)象則返回結(jié)果True,否則返回False?!菊f(shuō)明】表6-1中的id()函數(shù)用于獲取對(duì)象的內(nèi)存地址。is與==的區(qū)別是:is用于判斷兩個(gè)變量的引用對(duì)象是否為同一個(gè),==用于判斷引用變量的值是否相等。循序漸進(jìn)知識(shí)要點(diǎn)6.1創(chuàng)建類(lèi)及其對(duì)象6.1.2創(chuàng)建類(lèi)的實(shí)例6.2類(lèi)屬性與實(shí)例屬性6.3類(lèi)方法與實(shí)例方法6.3.1類(lèi)的實(shí)例方法6.3.2類(lèi)方法6.3.3靜態(tài)方法6【任務(wù)6-1】定義商品類(lèi)及其成員【任務(wù)6-2】修改與訪問(wèn)類(lèi)屬性、創(chuàng)建實(shí)例屬性【任務(wù)6-3】定義與訪問(wèn)類(lèi)的實(shí)例方法6.4類(lèi)的構(gòu)造方法與析構(gòu)方法6.4.1類(lèi)的構(gòu)造方法6.4.2類(lèi)的析構(gòu)方法6.5類(lèi)的繼承與方法重寫(xiě)6.5.1類(lèi)的繼承6.5.2方法繼承6.5.3方法重寫(xiě)6.6Python3的命名空間和作用域6.1.1定義類(lèi)在Python中,類(lèi)的定義使用class關(guān)鍵字來(lái)實(shí)現(xiàn),定義類(lèi)的基本語(yǔ)法格式如下。classClassName: <statement>#類(lèi)體其中,ClassName
用于指定類(lèi)名稱(chēng),一般使用大寫(xiě)字母開(kāi)頭,如果類(lèi)名稱(chēng)中包括多個(gè)單詞,后面的幾個(gè)單詞的首字母也要大寫(xiě),即采用大駝峰法命名,這是類(lèi)的命名慣例,應(yīng)遵守;statement表示類(lèi)體,類(lèi)體主要包括類(lèi)屬性定義和方法定義。如果在定義類(lèi)時(shí),暫時(shí)不需要編寫(xiě)代碼,也可以在類(lèi)體中直接使用pass語(yǔ)句代替實(shí)際的代碼。【注意】類(lèi)名稱(chēng)后有個(gè)冒號(hào),類(lèi)體要向右邊合理縮進(jìn)。6.1.2創(chuàng)建類(lèi)的實(shí)例類(lèi)定義完成后,并不會(huì)真正創(chuàng)建一個(gè)實(shí)例對(duì)象,還需要手動(dòng)創(chuàng)建類(lèi)的實(shí)例,即實(shí)例化類(lèi)。類(lèi)的實(shí)例化也稱(chēng)為創(chuàng)建對(duì)象,其基本語(yǔ)法格式如下。ClassName(parameterlist)其中,ClassName
是必選名稱(chēng),用于指定具體的類(lèi)名稱(chēng);parameterlist
是可選參數(shù),當(dāng)創(chuàng)建一個(gè)類(lèi)時(shí)沒(méi)有創(chuàng)建__init__()方法,或者當(dāng)__init__()方法中只有一個(gè)self參數(shù)時(shí),parameterlist
允許省略。6.1.2創(chuàng)建類(lèi)的實(shí)例【實(shí)例6-1】演示Python類(lèi)的定義與類(lèi)實(shí)例的創(chuàng)建實(shí)例6-1的代碼如下所示。實(shí)例6-1代碼的運(yùn)行結(jié)果如下。循序漸進(jìn)知識(shí)要點(diǎn)6.1創(chuàng)建類(lèi)及其對(duì)象6.1.2創(chuàng)建類(lèi)的實(shí)例6.2類(lèi)屬性與實(shí)例屬性6.3類(lèi)方法與實(shí)例方法6.3.1類(lèi)的實(shí)例方法6.3.2類(lèi)方法6.3.3靜態(tài)方法6【任務(wù)6-1】定義商品類(lèi)及其成員【任務(wù)6-2】修改與訪問(wèn)類(lèi)屬性、創(chuàng)建實(shí)例屬性【任務(wù)6-3】定義與訪問(wèn)類(lèi)的實(shí)例方法6.4類(lèi)的構(gòu)造方法與析構(gòu)方法6.4.1類(lèi)的構(gòu)造方法6.4.2類(lèi)的析構(gòu)方法6.5類(lèi)的繼承與方法重寫(xiě)6.5.1類(lèi)的繼承6.5.2方法繼承6.5.3方法重寫(xiě)6.6Python3的命名空間和作用域6.2類(lèi)屬性與實(shí)例屬性類(lèi)的成員包括屬性和方法,在類(lèi)中創(chuàng)建了類(lèi)的成員后,可以通過(guò)類(lèi)的實(shí)例進(jìn)行訪問(wèn)。在類(lèi)中定義的變量稱(chēng)為類(lèi)的屬性,根據(jù)定義位置的不同,屬性可以分為類(lèi)屬性和實(shí)例屬性。類(lèi)實(shí)例化后,可以使用其屬性,實(shí)際上,創(chuàng)建一個(gè)類(lèi)之后,就可以通過(guò)類(lèi)名稱(chēng)訪問(wèn)其屬性。類(lèi)屬性是指在類(lèi)中的方法外定義的屬性,包括公有屬性、保護(hù)屬性和私有屬性,類(lèi)屬性可以在類(lèi)的所有實(shí)例之間共享,也就是在所有實(shí)例化的對(duì)象中公用。實(shí)例屬性在方法內(nèi)定義,通常在類(lèi)的__init__()方法中定義,實(shí)例屬性只屬于類(lèi)的實(shí)例,只能通過(guò)實(shí)例名稱(chēng)訪問(wèn)。6.2類(lèi)屬性與實(shí)例屬性【實(shí)例6-2】演示Python類(lèi)的定義與類(lèi)屬性的定義實(shí)例6-2的代碼如下所示。實(shí)例6-2代碼的運(yùn)行結(jié)果如下。6.2類(lèi)屬性與實(shí)例屬性實(shí)例6-2中的屬性style、model、clothingLength、bust、waistline、leeveLength、shoulderWidth都屬于Suit類(lèi)的屬性,這些屬性在類(lèi)中的方法外面、方法內(nèi)部、類(lèi)外部都可以訪問(wèn),但訪問(wèn)形式有區(qū)別,如表所示。訪問(wèn)位置訪問(wèn)形式與要求樣例類(lèi)內(nèi)部方法外部屬性名稱(chēng)style類(lèi)內(nèi)部方法內(nèi)部類(lèi)名稱(chēng).屬性名稱(chēng)Suit.bust、Suit.modelself.屬性名稱(chēng)self.style類(lèi)外部類(lèi)名稱(chēng).屬性名稱(chēng)Suit.bust類(lèi)實(shí)例名稱(chēng).屬性名稱(chēng)suit1.model由表6-2可知,類(lèi)屬性的訪問(wèn)形式有4種:屬性名稱(chēng)、類(lèi)名稱(chēng).屬性名稱(chēng)、self.屬性名稱(chēng)、類(lèi)實(shí)例名稱(chēng).屬性名稱(chēng)。6.2類(lèi)屬性與實(shí)例屬性因?yàn)轭?lèi)屬性可以在類(lèi)的所有實(shí)例之間共享,如果在類(lèi)外對(duì)類(lèi)屬性進(jìn)行修改,所有類(lèi)實(shí)例的屬性也會(huì)同步修改,類(lèi)屬性的值通過(guò)多個(gè)類(lèi)實(shí)例訪問(wèn)時(shí),其結(jié)果相同。suit2=Suit()Suit.bust=60.5print("Suit類(lèi)的屬性bust值為:",Suit.bust)print("suit1實(shí)例的屬性bust值為:",suit1.bust)print("suit2實(shí)例的屬性bust值為:",suit2.bust)在實(shí)例6-2中添加以下代碼。新增代碼的運(yùn)行結(jié)果如下。Suit類(lèi)的屬性bust值為:60.5suit1實(shí)例的屬性bust值為:60.5suit2實(shí)例的屬性bust值為:60.5從運(yùn)行結(jié)果可以看出,通過(guò)3種方式(Suit.bust、suit1.bust、suit2.bust)訪問(wèn)類(lèi)屬性,其結(jié)果均為修改后的屬性值。如前所述,襯衫設(shè)計(jì)圖相當(dāng)于類(lèi),其屬性值修改后,所有根據(jù)修改后的設(shè)計(jì)圖制作的襯衫實(shí)物,其屬性值會(huì)同步變化。6.2類(lèi)屬性與實(shí)例屬性suit2.bust=59.5print("Suit類(lèi)的屬性bust值為:",Suit.bust)print("suit1實(shí)例的屬性bust值為:",suit1.bust)print("suit2實(shí)例的屬性bust值為:",suit2.bust)在實(shí)例6-2中添加以下代碼。第2次新增代碼的運(yùn)行結(jié)果如下。Suit類(lèi)的屬性bust值為:60.5suit1實(shí)例的屬性bust值為:60.5suit2實(shí)例的屬性bust值為:59.5從第2次新增代碼的運(yùn)行結(jié)果可以看出,通過(guò)類(lèi)實(shí)例suit2修改bust屬性值后,只有類(lèi)實(shí)例suit2的bust屬性值發(fā)生了變化,而類(lèi)Suit的bust屬性值和另一個(gè)類(lèi)實(shí)例suit1的bust屬性值都沒(méi)有改變。這里修改的bust屬性是類(lèi)實(shí)例suit2的屬性,而不是類(lèi)Suit的屬性。根據(jù)以上分析可知,實(shí)例屬性也可以通過(guò)實(shí)例名稱(chēng)進(jìn)行修改,與類(lèi)屬性不同,通過(guò)實(shí)例名稱(chēng)修改實(shí)例屬性后,并不影響類(lèi)屬性和其他實(shí)例中相應(yīng)的實(shí)例屬性的值,影響的只有實(shí)例自身的屬性值。循序漸進(jìn)知識(shí)要點(diǎn)6.1創(chuàng)建類(lèi)及其對(duì)象6.1.2創(chuàng)建類(lèi)的實(shí)例6.2類(lèi)屬性與實(shí)例屬性6.3類(lèi)方法與實(shí)例方法6.3.1類(lèi)的實(shí)例方法6.3.2類(lèi)方法6.3.3靜態(tài)方法6【任務(wù)6-1】定義商品類(lèi)及其成員【任務(wù)6-2】修改與訪問(wèn)類(lèi)屬性、創(chuàng)建實(shí)例屬性【任務(wù)6-3】定義與訪問(wèn)類(lèi)的實(shí)例方法6.4類(lèi)的構(gòu)造方法與析構(gòu)方法6.4.1類(lèi)的構(gòu)造方法6.4.2類(lèi)的析構(gòu)方法6.5類(lèi)的繼承與方法重寫(xiě)6.5.1類(lèi)的繼承6.5.2方法繼承6.5.3方法重寫(xiě)6.6Python3的命名空間和作用域6.3.1類(lèi)的實(shí)例方法創(chuàng)建類(lèi)的實(shí)例方法的基本語(yǔ)法格式如下。def
functionName(self,parameterlist) <方法體>functionName
表示方法名稱(chēng),采用小駝峰法命名,使用小寫(xiě)字母開(kāi)頭。self為必要參數(shù),表示類(lèi)的實(shí)例,可以通過(guò)它來(lái)傳遞實(shí)例的屬性和方法,也可以通過(guò)它傳遞類(lèi)的屬性和方法,其名稱(chēng)self并不是規(guī)定的名稱(chēng),而是使用Python編程時(shí)的慣用名稱(chēng),該名稱(chēng)也可以自定義,例如使用this,但是最好還是按照慣例使用self。parameterlist
用于指定除self參數(shù)以外的參數(shù),各參數(shù)之間使用半角逗號(hào)“,”進(jìn)行分隔。方法體的代碼用于實(shí)現(xiàn)所需的功能。6.3.1類(lèi)的實(shí)例方法類(lèi)的實(shí)例方法創(chuàng)建完成后,在類(lèi)外部可以通過(guò)類(lèi)的實(shí)例名稱(chēng)和點(diǎn)“.”操作符進(jìn)行訪問(wèn),其基本語(yǔ)法格式如下。instanceName.functionName(parameterValue)instanceName
表示類(lèi)的實(shí)例名稱(chēng);functionName
表示要調(diào)用的方法名稱(chēng)。parameterValue
表示調(diào)用方法時(shí)的實(shí)際參數(shù),其個(gè)數(shù)與創(chuàng)建類(lèi)的實(shí)例方法中parameterlist
的個(gè)數(shù)相同。6.3.1類(lèi)的實(shí)例方法【實(shí)例6-3】演示Python類(lèi)的實(shí)例方法的定義實(shí)例5-1的代碼如下所示。實(shí)例5-2代碼的運(yùn)行結(jié)果如下?!菊f(shuō)明】該運(yùn)行結(jié)果為作者運(yùn)行程序的輸出結(jié)果,年份不同該結(jié)果有變化。6.3.1類(lèi)的實(shí)例方法從實(shí)例6-3可以看出方法__calculateAge()的名稱(chēng)由兩個(gè)下劃線開(kāi)頭,表明該方法為類(lèi)的私有方法,只能在類(lèi)的內(nèi)部調(diào)用,不能在類(lèi)的外部調(diào)用。在類(lèi)內(nèi)部調(diào)用實(shí)例方法的基本語(yǔ)法格式如下。self.__methodName()例如:self.__calculateAge()。在類(lèi)外部可以調(diào)用類(lèi)的公有方法,調(diào)用形式有以下兩種。形式一:類(lèi)實(shí)例名稱(chēng).實(shí)例方法名稱(chēng)([參數(shù)值列表])。例如:man.getAge()。通過(guò)實(shí)例名稱(chēng)man調(diào)用getAge()方法時(shí),將實(shí)例對(duì)象man自身作為第1個(gè)參數(shù)傳遞給方法的參數(shù)self。形式二:類(lèi)名稱(chēng).實(shí)例方法名稱(chēng)(類(lèi)實(shí)例名稱(chēng)[,參數(shù)值列表])。例如:Person.getAge(man)。通過(guò)類(lèi)名稱(chēng)Person調(diào)用getAge()方法時(shí),也需要將實(shí)例對(duì)象man自身作為參數(shù)傳遞給方法的參數(shù)self。6.3.2類(lèi)方法在Python類(lèi)的內(nèi)部,使用def
關(guān)鍵字可以定義屬于類(lèi)的方法,這種方法需要使用@classmethod
來(lái)修飾,而且第1個(gè)參數(shù)一般命名為cls(這只是Python的慣用名稱(chēng),也可以使用自定義名稱(chēng),例如my)。類(lèi)方法一般使用類(lèi)的名稱(chēng)來(lái)調(diào)用,調(diào)用時(shí)會(huì)把類(lèi)名稱(chēng)傳遞給類(lèi)的第1個(gè)參數(shù)cls,通過(guò)cls
來(lái)傳遞類(lèi)的屬性和方法,但不能傳遞實(shí)例的屬性和方法。實(shí)例對(duì)象和類(lèi)對(duì)象都可以調(diào)用類(lèi)方法,調(diào)用類(lèi)方法的基本語(yǔ)法格式如下。形式一:類(lèi)實(shí)例名稱(chēng).類(lèi)方法名稱(chēng)([參數(shù)列表])。形式二:類(lèi)名稱(chēng).類(lèi)方法名稱(chēng)([參數(shù)列表])?!咀⒁狻空{(diào)用類(lèi)方法與調(diào)用類(lèi)的實(shí)例方法有所不同,使用類(lèi)名稱(chēng)調(diào)用類(lèi)方法時(shí),并不需要將類(lèi)實(shí)例名稱(chēng)作為參數(shù)顯式傳遞給類(lèi)方法。6.3.3靜態(tài)方法在Python類(lèi)的內(nèi)部,還可以定義靜態(tài)方法,這種靜態(tài)方法需要使用@staticmethod
來(lái)修飾,靜態(tài)方法沒(méi)有self和cls
參數(shù),方法體中不能使用類(lèi)或?qū)嵗娜魏螌傩院头椒?。?shí)例對(duì)象和類(lèi)對(duì)象都可以調(diào)用類(lèi)的靜態(tài)方法,要訪問(wèn)類(lèi)的靜態(tài)方法,可以采用類(lèi)名稱(chēng)調(diào)用,并且不會(huì)向靜態(tài)方法傳遞任何參數(shù)。調(diào)用類(lèi)的靜態(tài)方法的基本語(yǔ)法格式如下。形式一:類(lèi)實(shí)例名稱(chēng).類(lèi)靜態(tài)方法名稱(chēng)()。形式二:類(lèi)名稱(chēng).類(lèi)靜態(tài)方法名稱(chēng)()。靜態(tài)方法是類(lèi)中的函數(shù),不需要實(shí)例。靜態(tài)方法在邏輯上屬于類(lèi),但是和類(lèi)本身沒(méi)有關(guān)系,也就是說(shuō)靜態(tài)方法中不會(huì)涉及類(lèi)中的屬性和方法的操作??梢岳斫鉃?,靜態(tài)方法是個(gè)獨(dú)立的、單純的函數(shù),僅僅托管于某個(gè)類(lèi)的名稱(chēng)空間中,便于使用和維護(hù)。定義商品類(lèi)及其成員【任務(wù)6-1】【任務(wù)描述】(1)在PyCharm
中創(chuàng)建項(xiàng)目“Unit06”。(2)在項(xiàng)目“Unit06”中創(chuàng)建Python程序文件“t6-1.py”。(3)定義商品類(lèi)Commodity。(4)定義類(lèi)的多個(gè)公有屬性和私有屬性。(5)定義多個(gè)實(shí)例方法。(6)分別通過(guò)類(lèi)名稱(chēng)、實(shí)例名稱(chēng)訪問(wèn)類(lèi)的屬性。(7)分別通過(guò)類(lèi)的實(shí)例方法輸出類(lèi)的公有屬性和私有屬性值?!救蝿?wù)6-1】01【任務(wù)實(shí)施】02成功啟動(dòng)PyCharm
后,在指定位置“D:\PycharmProject\”創(chuàng)建PyCharm
項(xiàng)目“Unit06”。在PyCharm
項(xiàng)目“Unit06”中,新建Python程序文件“t6-1.py”,PyCharm
窗口中顯示程序文件“t6-1.py”的代碼編輯區(qū)域,在該程序文件的代碼編輯區(qū)域中自動(dòng)添加了模板內(nèi)容。03在文件“t6-1.py”的代碼編輯區(qū)域中的已有模板注釋內(nèi)容下面輸入代碼,程序文件“t6-1.py”中類(lèi)定義的代碼如下所示?!救蝿?wù)6-1】【任務(wù)實(shí)施】04針對(duì)創(chuàng)建的類(lèi)Commodity實(shí)施以下各項(xiàng)操作。(1)直接使用類(lèi)名稱(chēng)訪問(wèn)類(lèi)的公有屬性。(2)使用類(lèi)的實(shí)例名稱(chēng)訪問(wèn)類(lèi)的公有屬性(3)調(diào)用類(lèi)的實(shí)例方法輸出類(lèi)的公有屬性【任務(wù)6-1】【任務(wù)實(shí)施】04針對(duì)創(chuàng)建的類(lèi)Commodity實(shí)施以下各項(xiàng)操作。(4)通過(guò)類(lèi)名稱(chēng)或類(lèi)的實(shí)例名稱(chēng)訪問(wèn)類(lèi)的私有屬性(5)調(diào)用類(lèi)的實(shí)例方法輸出類(lèi)的私有屬性修改與訪問(wèn)類(lèi)屬性、創(chuàng)建實(shí)例屬性【任務(wù)6-2】【任務(wù)描述】(1)在項(xiàng)目“Unit06”中創(chuàng)建Python程序文件“t6-2.py”。(2)創(chuàng)建類(lèi)Commodity并定義其屬性和方法。(3)創(chuàng)建類(lèi)對(duì)象goods1和goods2。(4)通過(guò)類(lèi)名稱(chēng)Commodity調(diào)用類(lèi)的實(shí)例方法,輸出類(lèi)初始定義的公有屬性。(5)使用類(lèi)名稱(chēng)Commodity修改類(lèi)的公有屬性。(6)直接使用類(lèi)名稱(chēng)Commodity輸出類(lèi)修改之后的公有屬性。(7)使用類(lèi)實(shí)例名稱(chēng)goods1輸出類(lèi)修改之后的公有屬性。(8)使用類(lèi)實(shí)例名稱(chēng)goods2輸出類(lèi)修改之后的公有屬性。(9)通過(guò)類(lèi)名稱(chēng)Commodity調(diào)用類(lèi)的實(shí)例方法,輸出類(lèi)修改之后的公有屬性。(10)通過(guò)類(lèi)實(shí)例名稱(chēng)goods1調(diào)用類(lèi)的實(shí)例方法,輸出類(lèi)修改之后的公有屬性。(11)第2次修改類(lèi)的公有屬性。(12)直接使用類(lèi)名稱(chēng)Commodity輸出類(lèi)第2次修改之后的公有屬性。(13)使用類(lèi)實(shí)例名稱(chēng)goods1輸出類(lèi)第2次修改之后的公有屬性。(14)使用類(lèi)實(shí)例名稱(chēng)goods2輸出類(lèi)第2次修改之后的公有屬性。(15)通過(guò)類(lèi)名稱(chēng)Commodity調(diào)用類(lèi)的實(shí)例方法,輸出類(lèi)第2次修改之后的公有屬性。(16)分別通過(guò)類(lèi)實(shí)例名稱(chēng)goods1、goods2調(diào)用類(lèi)的實(shí)例方法,輸出類(lèi)第2次修改之后的公有屬性?!救蝿?wù)6-2】01【任務(wù)實(shí)施】在PyCharm
項(xiàng)目“Unit06”中,新建Python程序文件“t6-2.py”,在該程序文件“t6-2.py”的代碼編輯區(qū)域中創(chuàng)建類(lèi)Commodity并定義其屬性和方法的代碼詳見(jiàn)“t6-1.py”對(duì)應(yīng)的代碼。【任務(wù)6-2】02【任務(wù)實(shí)施】針對(duì)創(chuàng)建的類(lèi)Commodity進(jìn)行類(lèi)屬性、實(shí)例屬性的修改與訪問(wèn)。(1)創(chuàng)建類(lèi)對(duì)象(2)通過(guò)類(lèi)名稱(chēng)Commodity調(diào)用類(lèi)的實(shí)例方法,輸出類(lèi)初始定義的公有屬性。(3)使用類(lèi)名稱(chēng)Commodity修改類(lèi)的公有屬性。【任務(wù)6-2】02【任務(wù)實(shí)施】針對(duì)創(chuàng)建的類(lèi)Commodity進(jìn)行類(lèi)屬性、實(shí)例屬性的修改與訪問(wèn)。(4)直接使用類(lèi)名稱(chēng)Commodity輸出類(lèi)修改之后的公有屬性。(5)使用類(lèi)實(shí)例名稱(chēng)goods1輸出類(lèi)修改之后的公有屬性。(6)使用類(lèi)實(shí)例名稱(chēng)goods2輸出類(lèi)修改之后的公有屬性?!救蝿?wù)6-2】02【任務(wù)實(shí)施】針對(duì)創(chuàng)建的類(lèi)Commodity進(jìn)行類(lèi)屬性、實(shí)例屬性的修改與訪問(wèn)。(7)通過(guò)類(lèi)名稱(chēng)Commodity調(diào)用類(lèi)的實(shí)例方法,輸出類(lèi)修改之后的公有屬性。(8)通過(guò)類(lèi)實(shí)例名稱(chēng)goods1調(diào)用類(lèi)的實(shí)例方法,輸出類(lèi)修改之后的公有屬性。(9)第2次修改類(lèi)的公有屬性?!救蝿?wù)6-2】02【任務(wù)實(shí)施】針對(duì)創(chuàng)建的類(lèi)Commodity進(jìn)行類(lèi)屬性、實(shí)例屬性的修改與訪問(wèn)。(10)直接使用類(lèi)名稱(chēng)Commodity輸出類(lèi)第2次修改之后的公有屬性。(11)使用類(lèi)實(shí)例名稱(chēng)goods1輸出類(lèi)第2次修改之后的公有屬性。(12)使用類(lèi)實(shí)例名稱(chēng)goods2輸出類(lèi)第2次修改之后的公有屬性?!救蝿?wù)6-2】02【任務(wù)實(shí)施】針對(duì)創(chuàng)建的類(lèi)Commodity進(jìn)行類(lèi)屬性、實(shí)例屬性的修改與訪問(wèn)。(13)通過(guò)類(lèi)名稱(chēng)Commodity調(diào)用類(lèi)的實(shí)例方法,輸出類(lèi)第2次修改之后的公有屬性。(14)分別通過(guò)類(lèi)實(shí)例名稱(chēng)goods1、goods2調(diào)用類(lèi)的實(shí)例方法,輸出類(lèi)第2次修改之后的公有屬性。運(yùn)行結(jié)果之一
運(yùn)行結(jié)果之二
運(yùn)行結(jié)果之三定義與訪問(wèn)類(lèi)的實(shí)例方法【任務(wù)6-3】【任務(wù)描述】(1)在項(xiàng)目“Unit06”中創(chuàng)建Python程序文件“t6-3.py”。(2)在程序文件“t6-3.py”中創(chuàng)建類(lèi)對(duì)象goods。(3)在程序文件“t6-3.py”中調(diào)用多個(gè)類(lèi)的實(shí)例方法,輸出所需數(shù)據(jù)。【任務(wù)6-3】01【任務(wù)實(shí)施】在PyCharm
項(xiàng)目“Unit06”中創(chuàng)建Python程序文件“t6-3.py”。在程序文件“t6-3.py”中編寫(xiě)代碼,實(shí)現(xiàn)所需功能。創(chuàng)建類(lèi)Commodity并定義私有屬性、實(shí)例方法的代碼如下所示?!救蝿?wù)6-3】02【任務(wù)實(shí)施】針對(duì)創(chuàng)建的類(lèi)Commodity實(shí)施以下各項(xiàng)操作。(1)創(chuàng)建類(lèi)對(duì)象goods。(2)調(diào)用多個(gè)類(lèi)的實(shí)例方法,輸出所需數(shù)據(jù)。程序文件“t6-3.py”的運(yùn)行結(jié)果如下所示。循序漸進(jìn)知識(shí)要點(diǎn)6.1創(chuàng)建類(lèi)及其對(duì)象6.1.2創(chuàng)建類(lèi)的實(shí)例6.2類(lèi)屬性與實(shí)例屬性6.3類(lèi)方法與實(shí)例方法6.3.1類(lèi)的實(shí)例方法6.3.2類(lèi)方法6.3.3靜態(tài)方法6【任務(wù)6-1】定義商品類(lèi)及其成員【任務(wù)6-2】修改與訪問(wèn)類(lèi)屬性、創(chuàng)建實(shí)例屬性【任務(wù)6-3】定義與訪問(wèn)類(lèi)的實(shí)例方法6.4類(lèi)的構(gòu)造方法與析構(gòu)方法6.4.1類(lèi)的構(gòu)造方法6.4.2類(lèi)的析構(gòu)方法6.5類(lèi)的繼承與方法重寫(xiě)6.5.1類(lèi)的繼承6.5.2方法繼承6.5.3方法重寫(xiě)6.6Python3的命名空間和作用域6.4.1類(lèi)的構(gòu)造方法在Python中,類(lèi)有一個(gè)名為“__init__”的特殊方法,稱(chēng)為構(gòu)造方法,該方法在類(lèi)實(shí)例化時(shí)會(huì)自動(dòng)調(diào)用,不需要顯式調(diào)用。【說(shuō)明】“__init__”是Python默認(rèn)的方法名稱(chēng),其開(kāi)頭和結(jié)尾處是兩個(gè)下劃線(下劃線中間沒(méi)有空格)。在創(chuàng)建類(lèi)時(shí),類(lèi)通常會(huì)自動(dòng)創(chuàng)建一個(gè)__init__()方法,每當(dāng)創(chuàng)建一個(gè)新的類(lèi)實(shí)例時(shí),如果用戶(hù)沒(méi)有重新定義構(gòu)造方法,則系統(tǒng)自動(dòng)執(zhí)行默認(rèn)的構(gòu)造方法__init__(),進(jìn)行一些初始化操作。對(duì)于如下代碼,實(shí)例化類(lèi)Person時(shí),對(duì)應(yīng)的__init__()方法就會(huì)被調(diào)用。man=Person()6.4.1類(lèi)的構(gòu)造方法【實(shí)例6-4】演示Python類(lèi)的構(gòu)造方法定義實(shí)例6-4的代碼如下所示。運(yùn)行結(jié)果姓名:李明性別:男年齡:196.4.2類(lèi)的析構(gòu)方法在Python中,析構(gòu)方法的基本語(yǔ)法格式為:__del__(self)。在釋放對(duì)象時(shí)系統(tǒng)自動(dòng)調(diào)用該方法,不需要顯式調(diào)用,可以在該方法中編寫(xiě)代碼,進(jìn)行一些釋放資源的操作。循序漸進(jìn)知識(shí)要點(diǎn)6.1創(chuàng)建類(lèi)及其對(duì)象6.1.2創(chuàng)建類(lèi)的實(shí)例6.2類(lèi)屬性與實(shí)例屬性6.3類(lèi)方法與實(shí)例方法6.3.1類(lèi)的實(shí)例方法6.3.2類(lèi)方法6.3.3靜態(tài)方法6【任務(wù)6-1】定義商品類(lèi)及其成員【任務(wù)6-2】修改與訪問(wèn)類(lèi)屬性、創(chuàng)建實(shí)例屬性【任務(wù)6-3】定義與訪問(wèn)類(lèi)的實(shí)例方法6.4類(lèi)的構(gòu)造方法與析構(gòu)方法6.4.1類(lèi)的構(gòu)造方法6.4.2類(lèi)的析構(gòu)方法6.5類(lèi)的繼承與方法重寫(xiě)6.5.1類(lèi)的繼承6.5.2方法繼承6.5.3方法重寫(xiě)6.6Python3的命名空間和作用域6.5.1類(lèi)的繼承1.單一繼承Python支持類(lèi)的繼承,子類(lèi)的定義如下所示。classDerivedClassName(ParentClassName): <類(lèi)體>其中,DerivedClassName
用于指定子類(lèi)名稱(chēng);ParentClassName
用于指定要繼承的父類(lèi)名稱(chēng),可以有多個(gè),對(duì)于單一繼承只有一個(gè)。如果不指定父類(lèi)名稱(chēng),則繼承Python的基類(lèi)object。類(lèi)體為實(shí)現(xiàn)所需功能的代碼,包括屬性、方法的定義,如果定義類(lèi)時(shí)暫時(shí)無(wú)須編寫(xiě)代碼,可以直接使用pass語(yǔ)句代替。父類(lèi)ParentClassName
必須與子類(lèi)定義在一個(gè)作用域內(nèi)。6.5.1類(lèi)的繼承【實(shí)例6-5】演示Python類(lèi)和單一繼承子類(lèi)的定義實(shí)例6-5的代碼如下所示。運(yùn)行結(jié)果父類(lèi)Person的屬性name值為:李明父類(lèi)Person的屬性sex值為:男子類(lèi)Student的屬性name值為:李明子類(lèi)Student的屬性sex值為:男子類(lèi)Student的屬性grade值為:956.5.1類(lèi)的繼承2.多重繼承Python在一定程序上支持多繼承形式。多繼承的類(lèi)定義基本語(yǔ)法格式如下。classDerivedClassName(ParentClassName1,ParentClassName2,…): <statement>需要注意小括號(hào)中父類(lèi)的順序,若父類(lèi)中有相同的方法名,而子類(lèi)在使用時(shí)未指定繼承自哪個(gè)父類(lèi),Python將從左至右搜索括號(hào)中的父類(lèi)。DerivedClassName
用于指定子類(lèi)名稱(chēng),ParentClassName1、ParentClassName2……則表示繼承的多個(gè)父類(lèi)名稱(chēng),使用半角逗號(hào)“,”分隔。6.5.2方法繼承子類(lèi)可以繼承父類(lèi)的實(shí)例方法,也可以增加自己的實(shí)例方法。子類(lèi)對(duì)象可以直接調(diào)用父類(lèi)的實(shí)例方法,調(diào)用的基本語(yǔ)法格式如下。子類(lèi)名稱(chēng).父類(lèi)方法名稱(chēng)([參數(shù)列表])例如member.printTest()。6.5.3方法重寫(xiě)父類(lèi)的成員都會(huì)被子類(lèi)繼承,如果程序中的父類(lèi)方法的功能不能滿(mǎn)足需求,可以在子類(lèi)重寫(xiě)父類(lèi)中的同名方法,子類(lèi)可以覆蓋父類(lèi)中的任何方法,子類(lèi)的方法中也可以調(diào)用父類(lèi)中的同名方法。循序漸進(jìn)知識(shí)要點(diǎn)6.1創(chuàng)建類(lèi)及其對(duì)象6.1.2創(chuàng)建類(lèi)的實(shí)例6.2類(lèi)屬性與實(shí)例屬性6.3類(lèi)方法與實(shí)例方法6.3.1類(lèi)的實(shí)例方法6.3.2類(lèi)方法6.3.3靜態(tài)方法6【任務(wù)6-1】定義商品類(lèi)及其成員【任務(wù)6-2】修改與訪問(wèn)類(lèi)屬性、創(chuàng)建實(shí)例屬性【任務(wù)6-3】定義與訪問(wèn)類(lèi)的實(shí)例方法6.4類(lèi)的構(gòu)造方法與析構(gòu)方法6.4.1類(lèi)的構(gòu)造方法6.4.2類(lèi)的析構(gòu)方法6.5類(lèi)的繼承與方法重寫(xiě)6.5.1類(lèi)的繼承6.5.2方法繼承6.5.3方法重寫(xiě)6.6Python3的命名空間和作用域6.6Python3的命名空間和作用域在理解Python的命名空間和作用域前,先看一下計(jì)算機(jī)中的多個(gè)磁盤(pán)、多個(gè)文件夾與多個(gè)文件的存儲(chǔ)關(guān)系。計(jì)算機(jī)中可以有多個(gè)硬盤(pán),同一個(gè)硬盤(pán)中可以有多個(gè)邏輯分區(qū)(即磁盤(pán)),同一個(gè)磁盤(pán)中可以有多個(gè)文件夾,同一個(gè)文件夾中可以有多個(gè)文件。并且同一個(gè)磁盤(pán)中不能出現(xiàn)重名的文件夾,同一文件夾中不能出現(xiàn)重名的文件,但不同磁盤(pán)或不同文件夾中的文件可以重名。x01.txt02.txt02.txty01.txt文件夾x文件夾y磁盤(pán)E:文件夾x磁盤(pán)F:x01.txty01.txt6.6Python3的命名空間和作用域Python的命名空間提供了在項(xiàng)目中避免名稱(chēng)沖突的一種方法。各個(gè)命名空間是獨(dú)立的,沒(méi)有任何關(guān)系,所以雖然一個(gè)命名空間中不能有重名,但不同的命名空間是可以有重名的。Python的命名空間結(jié)構(gòu)主要由包、模塊、類(lèi)、函數(shù)、方法、屬性、變量組成,相同的對(duì)象名稱(chēng)可以存在于多個(gè)命名空間中。一個(gè)Python項(xiàng)目中可以定義多個(gè)包,并且包名要不同,例如“package01”“package02”;一個(gè)包中可創(chuàng)建多個(gè)模塊,同一個(gè)包中的多個(gè)模塊名稱(chēng)要不同,不同包的模塊可以重名;一個(gè)模塊中可以定義多個(gè)類(lèi)、函數(shù)、變量,同一個(gè)包的同一個(gè)模塊中定義的類(lèi)、函數(shù)、變量的名稱(chēng)要不同,不同的包或同一個(gè)包的不同模塊中定義的類(lèi)、函數(shù)、變量可以重名;一個(gè)類(lèi)中可以定義多個(gè)屬性、方法,同一個(gè)類(lèi)中的多個(gè)屬性、方法名稱(chēng)要不同,不同名稱(chēng)的類(lèi)或不同級(jí)別的類(lèi)(父類(lèi)與子類(lèi))中定義的屬性、方法可以重名;一個(gè)函數(shù)中可以定義多個(gè)變量,同一個(gè)函數(shù)中的多個(gè)變量名稱(chēng)要不同,不同函數(shù)中定義的變量可以重名。6.6Python3的命名空間和作用域Python的命名空間結(jié)構(gòu)如圖所示。package01module01ClassAClassB
methodXattributeMattributeNmethodXattributeMattributeN
methodXattributeMattributeN
functionXfunctionYmodule02variableMvariableNvariableMvariableNmodule01package02ClassA
ClassB
methodXattributeMattributeN
methodXattributeMattributeN
項(xiàng)目N1.3種命名空間(1)內(nèi)置命名空間(Built-inNamespace)Python內(nèi)置的名稱(chēng),例如函數(shù)名abs、char和異常名稱(chēng)BaseException、Exception等。(2)全局命名空間(GlobalNamespace)。全局名稱(chēng)指模塊中定義的名稱(chēng),記錄了模塊級(jí)變量,包括函數(shù)、類(lèi)、其他導(dǎo)入的模塊級(jí)的變量和常量。(3)局部命名空間(LocalNamespace)局部名稱(chēng)指函數(shù)中定義的名稱(chēng),記錄了函數(shù)級(jí)變量,包括函數(shù)的參數(shù)和局部定義的變量。類(lèi)內(nèi)以及類(lèi)的方法中定義的名稱(chēng)也屬于局部名稱(chēng)。2.命名空間的查找順序假設(shè)要使用變量var,則Python的查找順序?yàn)椋壕植棵臻g→全局命名空間→內(nèi)置命名空間。如果找不到變量var,它將放棄查找并引發(fā)NameError異常。運(yùn)行結(jié)果如下。NameError:name'var'isnotdefined3.命名空間的生命周期命名空間的生命周期取決于對(duì)象的作用域,如果對(duì)象執(zhí)行完成,則相應(yīng)命名空間的生命周期結(jié)束。因此,我們無(wú)法從外部命名空間訪問(wèn)內(nèi)部命名空間的對(duì)象。示例如下。#var1是全局名稱(chēng)var1=5def
local_func(): #var2是局部名稱(chēng) var2=6
def
inner_func(): #var3是內(nèi)置的局部名稱(chēng) var3=74.作用域在Python中,程序的變量并不是在任何位置都可以訪問(wèn)的,訪問(wèn)權(quán)限取決于這個(gè)變量是在哪里賦值的。變量的作用域決定了哪一部分程序可以訪問(wèn)哪些特定的變量。Python的作用域一共有4種,具體如下。局部作用域(L,Local):最內(nèi)層,包含局部變量,例如一個(gè)函數(shù)或方法內(nèi)部。閉包函數(shù)外的函數(shù)(E,Enclosing):包含非局部(Non-Local)、非全局(Non-Global)的變量;例如兩個(gè)嵌套函數(shù),一個(gè)函數(shù)(或類(lèi))A里面又包含一個(gè)函數(shù)B,那么對(duì)于B
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度礦山事故水池建設(shè)與安全生產(chǎn)保障合同
- 二零二五年度城市別墅購(gòu)房定金合同
- 2025年度景觀施工項(xiàng)目安全監(jiān)理合同
- 2025年度電視劇劇本編排與制作合同
- 二零二五年度廣告?zhèn)髅絼趧?wù)派遣員工服務(wù)合同
- 酒店住宿意外事故責(zé)任免除與2025年度安全保障協(xié)議
- 二零二五年度老年贍養(yǎng)贍養(yǎng)金及醫(yī)療救助合同
- 辦公區(qū)域搬遷安排及流程梳理通知
- 關(guān)于銷(xiāo)售團(tuán)隊(duì)建設(shè)與管理的年度工作總結(jié)報(bào)告
- 美發(fā)店勞動(dòng)合同協(xié)議書(shū)
- 四年級(jí)數(shù)學(xué)(四則混合運(yùn)算帶括號(hào))計(jì)算題專(zhuān)項(xiàng)練習(xí)與答案
- 2024解析:第十二章機(jī)械效率-基礎(chǔ)練(解析版)
- 建筑工程項(xiàng)目合作備忘錄
- 靈活用工管理
- 全媒體運(yùn)營(yíng)師試題庫(kù)(含答案)
- 2024至2030年中國(guó)礦用隔爆型監(jiān)控?cái)z像儀行業(yè)投資前景及策略咨詢(xún)研究報(bào)告
- 大學(xué)生職業(yè)素養(yǎng)訓(xùn)練(第六版)課件 第二單元學(xué)習(xí)職業(yè)禮儀
- 北京市燕山區(qū)中考一模英語(yǔ)試題及答案
- 腦卒中-腦卒中的康復(fù)治療
- 2024至2030年中國(guó)超聲波加工機(jī)床行業(yè)深度調(diào)研及發(fā)展預(yù)測(cè)報(bào)告
- 疫情統(tǒng)計(jì)學(xué)智慧樹(shù)知到答案2024年浙江大學(xué)
評(píng)論
0/150
提交評(píng)論