版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Python編程基礎(chǔ)06-2月-241類的定義和專有方法目錄認識面向?qū)ο缶幊?
對象的屬性和方法3迭代器4繼承5認識面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘋OP,即面向?qū)ο缶幊蹋ɑ颉懊嫦驅(qū)ο蟪绦蛟O(shè)計”,ObjectOrientedProgramming)。類和對象是OOP中的兩個關(guān)鍵內(nèi)容,在面向?qū)ο缶幊讨?,以類來?gòu)造現(xiàn)實世界中的事物情景,再基于類創(chuàng)建對象來進一步認識、理解、刻畫。根據(jù)類來創(chuàng)建的對象,每個對象都會自動帶有類的屬性和特點,然后可以按照實際需要賦予每個對象特有的屬性,這個過程被稱為類的實例化。描述創(chuàng)建數(shù)據(jù)或邏輯的簡單抽象層(抽象的直接表現(xiàn)形式通常為類)。抽象指對現(xiàn)實世界的事物,行為和特征建模,建立一個相關(guān)的數(shù)據(jù)集用于描繪程序結(jié)構(gòu),從而實現(xiàn)這個模型。抽象不僅包括這種模型的數(shù)據(jù)屬性,還定義了這些數(shù)據(jù)的接口。從面向?qū)ο笤O(shè)計(ObjectOrientedDesign,簡稱OOD)角度去看,如果類是從現(xiàn)實對象抽象而來的,那么抽象類就是基于類抽象而來的,可以進行相似編碼,或者編入與對象交互的對象中。從實現(xiàn)角度來看,抽象類與普通類的不同之處在于:抽象類中只能有抽象方法(沒有實現(xiàn)功能),該類不能被實例化,只能被繼承,且子類必須實現(xiàn)抽象方法。認識面向?qū)ο缶幊堂嫦驅(qū)ο缶幊贪l(fā)展OO方法(ObjectOrientedMethod,面向?qū)ο蠓椒ǎ喎QOO方法)在軟件開發(fā)過程中以“對象”為中心,用面向?qū)ο蟮乃枷雭碇笇?dǎo)開發(fā)活動的系統(tǒng)方法。20世紀(jì)50年代后期,在編寫大型程序時,常出現(xiàn)相同變量名在程序不同部分發(fā)生沖突的問題。對于這個問題,ALGOL語言的設(shè)計者在ALGOL60中用“Begin……End”為標(biāo)識的程序設(shè)計形成局部變量,避免它們與程序中其他同名變量相沖突。這是編程語言中首次提供封裝的嘗試,后來此結(jié)構(gòu)廣泛用于高級語言如Pascal、Ada、C之中。60年代中后期,在ALGOL基礎(chǔ)上研制開發(fā)了Simula語言,提出了對象的概念,并使用了類,也支持類繼承,出現(xiàn)了面向?qū)ο蟪绦蛟O(shè)計的雛形。70年代,經(jīng)典的Smalltalk語言誕生,它以Simula的類為核心概念,以Lisp語言為主要內(nèi)容。由于Smautalk持續(xù)不斷的改進,引入了對象、對象類、方法、實例等概念和術(shù)語,采用動態(tài)聯(lián)編和單繼承機制,以至于現(xiàn)在都將這一語言視為面向?qū)ο蟮幕A(chǔ)。正是通過Smalltalk不斷的改進與推廣應(yīng)用,人們才發(fā)現(xiàn)面向?qū)ο蠓椒ň哂心K化、信息封裝與隱蔽、抽象性、繼承性、多態(tài)性等獨特之處,為研制大型軟件、提高軟件可靠性、可重用性、可擴充性和可維護性提供了有效的手段和途徑。認識面向?qū)ο缶幊堂嫦驅(qū)ο缶幊贪l(fā)展在過去幾年中,Java語言成為了廣為應(yīng)用的語言,除了它與C語言語法上的近似,還有面向?qū)ο缶幊痰膹姶笠幻?,即Java的可移植性。在近幾年計算機語言發(fā)展中,一些既支持面向過程程序設(shè)計(該怎么做),又支持面向?qū)ο蟪绦蛟O(shè)計(對象該怎么做)的語言嶄露頭腳,如Python、Ruby等。1986年在美國舉行了首屆“面向?qū)ο缶幊獭⑾到y(tǒng)、語言和應(yīng)用(OOPSLA'86)”國際會議,使面向?qū)ο笫艿绞廊瞬毮浚浜竺磕暌粚?,這標(biāo)志著面向?qū)ο蠓椒ǖ难芯恳哑占暗饺澜?。面向?qū)ο蠓椒ㄒ驯粡V泛應(yīng)用于程序設(shè)計語言、數(shù)據(jù)庫、設(shè)計方法學(xué)、人機接口、操作系統(tǒng)、分布式系統(tǒng)、人工智能、實時系統(tǒng)、計算機體系結(jié)構(gòu)以及并發(fā)工程、綜合集成工程等眾多領(lǐng)域,同時在其領(lǐng)域應(yīng)用都得到了很大的發(fā)展。例如,現(xiàn)代的面向?qū)ο蟪绦蛟O(shè)計方法使得設(shè)計模式的用途、契約式設(shè)計和建模語言(如UML)技術(shù)也得到了一定提升。認識面向?qū)ο缶幊堂嫦驅(qū)ο缶幊虒嵗缥遄悠?,面向過程的設(shè)計思路就是首先分析問題的步驟:開始游戲;黑子先走;繪制畫面;判斷輸贏;輪到白子;繪制畫面;判斷輸贏;返回步驟2;輸出最后結(jié)果。把每個步驟分別用函數(shù)來實現(xiàn),問題就解決了。而面對對象的設(shè)計則是從另一種思路來解決問題。黑白雙方,這兩方的行為是一模一樣的;棋盤系統(tǒng),負責(zé)繪制畫面;規(guī)則系統(tǒng),負責(zé)判斷諸如犯規(guī)、輸贏等。第一類對象(玩家對象)負責(zé)接受用戶輸入信息,并告知第二類對象(棋盤對象)棋子布局的變化,棋盤對象接收到了棋子的輸入就要負責(zé)在畫面上顯示出這種變化,同時利用第三類對象(規(guī)則系統(tǒng))來對棋局進行判定。可以明顯的看出,面向?qū)ο笫且怨δ軄韯澐謫栴},而不是循環(huán)步驟。同樣是繪制棋局,在面向過程的設(shè)計中,需要多個步驟執(zhí)行該任務(wù)。但這樣很可能導(dǎo)致不同步驟的繪制棋局程序不同,因為設(shè)計人員會根據(jù)實際情況對繪制棋局的程序進行簡化。而面向?qū)ο蟮脑O(shè)計中,繪圖只可能在棋盤對象中出現(xiàn),從而保證繪制棋局的統(tǒng)一。認識面向?qū)ο缶幊堂嫦驅(qū)ο缶幊探榻B面向過程:根據(jù)業(yè)務(wù)邏輯從上到下寫壘代碼;函數(shù)式:將某功能代碼封裝到函數(shù)中,無需重復(fù)編寫整個功能代碼的實現(xiàn),僅調(diào)用即可;面向?qū)ο螅簩瘮?shù)進行封裝,這樣能夠更快速的開發(fā)程序,減少了重復(fù)代碼的重寫過程;認識面向?qū)ο缶幊淘诿嫦蜻^程程序設(shè)計中,問題被看作一系列需要完成的任務(wù),解決問題的焦點集中于函數(shù)。面向?qū)ο笥腥缦聝?yōu)點:數(shù)據(jù)抽象的概念可以在保持外部接口不變的情況下改變內(nèi)部實現(xiàn),從而減少甚至避免對外界的干擾;通過繼承大幅減少冗余的代碼,并可以方便地擴展現(xiàn)有代碼,提高編碼效率,也減低了出錯概率,降低軟件維護的難度;結(jié)合面向?qū)ο蠓治?、面向?qū)ο笤O(shè)計,允許將問題域中的對象直接映射到程序中,減少軟件開發(fā)過程中中間環(huán)節(jié)的轉(zhuǎn)換過程;1類的定義和專有方法目錄認識面向?qū)ο缶幊?
對象的屬性和方法3迭代器4繼承5類的定義和方法類就相當(dāng)于制造飛機時的圖紙,用它來進行創(chuàng)建的飛機就相當(dāng)于對象。具有相似內(nèi)部狀態(tài)和運動規(guī)律的實體的集合(或統(tǒng)稱、抽象)。具有相同屬性和行為事物的統(tǒng)稱。類是抽象的,在使用的時候通常會找到這個類的一個具體的存在,使用這個具體的存在。一個類可以找到多個對象。類的定義和方法類的抽象把日常生活中的事物抽象成程序中的類<1>坦克發(fā)射3顆炮彈轟掉了2架飛機<2>小明在公車上牽著一條叼著熱狗的狗類的定義和方法類的抽象下圖中,有哪些類呢?類的定義和方法類的構(gòu)成類(Class)由3個部分構(gòu)成類的名稱:類名類的屬性:一組數(shù)據(jù)類的方法:允許對進行操作的方法(行為)1)人的類設(shè)計:類名:人(Person)屬性:身高(height)、年齡(age)方法(行為/功能):跑(run)、打架(fight)2)狗類的設(shè)計類名:狗(Dog)屬性:品種、毛色、性別、名字方法(行為/功能):叫、跑、咬人、吃、搖尾巴類的定義和方法#定義一個Car類classCar:#屬性
wheelNum=4color='red'#方法
defgetCarInfo(self):print('車輪子個數(shù):%d,顏色%s'%(self.wheelNum,self.color))defrun(self):print('車在奔跑...')定義一個類,格式如下:
class類名:
屬性列表方法列表類的定義類的定義和方法selfPython的類的方法和普通的函數(shù)有一個很明顯的區(qū)別,類的方法必須有個額外的第一個參數(shù)(self),但在調(diào)用這個方法的時候不必為這個參數(shù)賦值。Python類方法的這個特別參數(shù)指代的是對象本身,而按照Python慣例,它用self來表示。self代表當(dāng)前對象的地址,self能避免非限定調(diào)用造成的全局變量。當(dāng)調(diào)用sleep等函數(shù)時,會自動把該對象的地址作為第一個參數(shù)傳入;如果不傳入地址,程序?qū)⒉恢涝撛L問哪個對象。self名稱也不是必須的,在Python中self不是關(guān)鍵詞,可以定義成a或b或其它名字。>>>classTest:...defprt(my_address):...print(my_address)...print(my_address.__class__)>>>t=Test()類的定義和方法類的專有方法__init__:構(gòu)造函數(shù),在生成對象時調(diào)用__del__:析構(gòu)函數(shù),釋放對象時使用__repr__:打印,轉(zhuǎn)換__setitem__:按照索引賦值__getitem__:按照索引獲取值__len__:獲得長度__cmp__:比較運算__call__:函數(shù)調(diào)用__add__:加運算__sub__:減運算__mul__:乘運算__div__:除運算__mod__:求余運算__pow__:乘方1類的定義和專有方法目錄認識面向?qū)ο缶幊?
對象的屬性和方法3迭代器4繼承5對象的屬性和方法類和對象類就是創(chuàng)建對象的模板對象的屬性和方法創(chuàng)建對象創(chuàng)建對象的格式為:
對象名=類名()#創(chuàng)建對象BMW=Car()#訪問屬性Print('車輪子的數(shù)量為:',BMW.wheelNum)#調(diào)用對象的getCarInfo方法BMW.getCarInfo()#調(diào)用對象的run方法BMW.run()對象的屬性和方法self#定義一個類
classAnimal:#方法
defsetName(self,name):=namedefprintName(self):print('名字為:',)#定義一個函數(shù)
defmyPrint(animalName):animalName.printName()dog1=Animal()dog1.setName('東東')myPrint(dog1)對象的屬性和方法構(gòu)造構(gòu)造器方法的格式def__init__():構(gòu)造器方法調(diào)用
classCar:#構(gòu)造器方法
def__init__(self):self.wheelNum=4self.color='blue'#方法
defrun(self):print('車在跑,目標(biāo):夏威夷')#創(chuàng)建對象
BMW=Car()print('車的顏色為:%s'%BMW.color)print('車輪子數(shù)量為:%d'%BMW.wheelNum)對象的屬性和方法構(gòu)造在創(chuàng)建完對象后__init__()方法已經(jīng)被默認的執(zhí)行了,那么能否讓對象在默認調(diào)用__init__()方法的時候傳遞一些參數(shù)呢?如果可以,那怎樣傳遞呢?
#定義類>>>classCat():..."""再次模擬貓咪的簡單嘗試"""...def__init__(self,name,age):#構(gòu)造器方法...=name#屬性...self.age=age...defsleep(self):..."""模擬貓咪被命令睡覺"""...print('%d歲的%s正在沙發(fā)上睡懶覺。'%(self.age,))...defeat(self,food):..."""模擬貓咪被命令吃東西"""...self.food=food...print(‘%d歲的%s在吃%s'%(self.age,,self.food))對象的屬性和方法析構(gòu)創(chuàng)建對象時,默認調(diào)用構(gòu)造方法;當(dāng)刪除一個對象時,同樣也會默認調(diào)用一個方法,這個方法為析構(gòu)方法析構(gòu)方法(__del__())classAnimal():#構(gòu)造方法
def__init__(self):print('---構(gòu)造方法被調(diào)用---')#析構(gòu)方法
def__del__(self):print('---析構(gòu)方法被調(diào)用---')#創(chuàng)建對象
dog=Animal()#刪除對象
deldog對象的屬性和方法對象的方法類的方法和對象的方法是一樣的。在定義類的方法時程序沒有為類的方法分配內(nèi)存,而在創(chuàng)建具體實例對象的程序才會為對象的每個數(shù)據(jù)屬性和方法分配內(nèi)存。>>>cat1=Cat('Tom',3)>>>sleep=cat1.sleep>>>print(sleep())3歲的Tom正在沙發(fā)上睡懶覺。>>>cat2=Cat('Jack',4)>>>eat=cat2.eat>>>print(eat('fish'))4歲的Jack在吃fish。雖然看上去似乎是調(diào)用了一個普通函數(shù),但是sleep函數(shù)和eat函數(shù)是引用cat1.sleep()和cat2.eat()的,意味著程序還是隱性地加入了self參數(shù)。對象的屬性和方法私有化要獲取對象的數(shù)據(jù)屬性并不需要通過sleep,eat等方法,直接在程序外部調(diào)用數(shù)據(jù)屬性即可。>>>print(cat1.age)3>>>print()Jack盡管這似乎很方便,但是卻違反了類的封裝原則。對象的狀態(tài)對于類外部應(yīng)該是不可訪問的。查看Python模塊代碼時會發(fā)現(xiàn)源碼里面定義的很多類,模塊中的算法通過使用類實現(xiàn)是很常見的,如果使用算法時能夠隨意訪問對象中的數(shù)據(jù)屬性,那么很可能在不經(jīng)意中修改了算法中已經(jīng)設(shè)置的參數(shù),這是很麻煩的。一般封裝好的類都會有足夠的函數(shù)接口供程序員使用,程序員沒有必要訪問對象的具體數(shù)據(jù)屬性。為防止程序員無意中修改對象的狀態(tài),需要對類的數(shù)據(jù)屬性和方法進行私有化。Python不支持直接私有方式,但可以使用一些小技巧達到私有特性的目的。為了讓方法的數(shù)據(jù)屬性或方法變?yōu)樗接?,只需要在它的名字前面加上雙下劃線即可。1類的定義和專有方法目錄認識面向?qū)ο缶幊?
對象的屬性和方法3迭代器4繼承5迭代器生成迭代器迭代是Python最強大的功能之一,是訪問集合元素的一種方式。之前接觸到的Python容器對象都可以用for遍歷。>>>forelementin[1,2,3]:...print(element)>>>forkeyin{'one':1,'two':2}:...print(key)迭代器返回迭代器——yield在Python中,使用生成器(generator)可以很方便的支持迭代器協(xié)議。生成器是一個返回迭代器的函數(shù),它可以通過常規(guī)的def語句來定義,但是不用return返回,而是用yield一次返回一個結(jié)果。不像一般的函數(shù)會生成值后退出,生成器函數(shù)在生成值后會自動掛起并暫停執(zhí)行狀態(tài)并保存狀態(tài)信息,這些信息在函數(shù)恢復(fù)時將再度有效。通過在每個結(jié)果之間掛起和繼續(xù)它們的狀態(tài)來自動實現(xiàn)迭代協(xié)議。這里用一個實例(yield實現(xiàn)斐波那契數(shù)列)來區(qū)分有yield和沒有yield的情況,對生成器進一步了解。在調(diào)用生成器運行的過程中,每次遇到y(tǒng)ield時函數(shù)會暫停并保存當(dāng)前所有的運行信息,返回yield的值。并在下一次執(zhí)行next函數(shù)時從當(dāng)前位置繼續(xù)運行。簡而言之,包含yield語句的函數(shù)會被特地編譯成生成器。當(dāng)函數(shù)被調(diào)用時,他們返回一個生成器對象,這個對象支持迭代器接口。迭代器生成迭代器迭代器有兩個基本的方法:iter函數(shù)和next函數(shù)。for語句在容器對象上調(diào)用了iter函數(shù),該函數(shù)返回一個定義next函數(shù)的迭代對象,它將在容器中逐一訪問元素。當(dāng)容器遍歷完畢,next函數(shù)找不到后續(xù)元素時,會引發(fā)一個StopIteration異常,告知for循環(huán)終止。>>>L=[1,2,3]>>>it=iter(L)>>>next(it)1>>>next(it)2當(dāng)知道迭代器協(xié)議的機制后,就可以把迭代器加入到自己的類中。需要定義一個__iter__函數(shù),它返回一個有next方法的對象。如果類定義了next函數(shù),__iter__函數(shù)可以只返回self。仍以代碼65的Cat類為例,通過迭代器能輸出對象的全部信息。>>>next(it)>>>next(it)Traceback(mostrecentcalllast):File"<ipython-input-9-2cdb14c0d4d6>",line1,in<module>next(it)StopIteration迭代器yield>>>importsys>>>deffibonacci(n,w=0):...a,b,counter=0,1,0...whileTrue:...if(counter>n):...return...yielda...a,b=b,a+b...print('%d,%d'%(a,b))...counter+=1>>>f=fibonacci(10,0)#f是一個迭代器,由生成器返回生成>>>whileTrue:...try:...print(next(f),end="")...except:...sys.exit()01,111,212,323,535,858,13813,211321,342134,553455,895589,144迭代器無yield>>>importsys>>>deffibonacci(n,w=0):...a,b,counter=0,1,0...whileTrue:...if(counter>n):...return...#yielda#不執(zhí)行yield語句...a,b=b,a+b...print('%d,%d'%(a,b))...counter+=1>>>f=fibonacci(10,0)#f是一個迭代器,由生成器返回生成>>>whileTrue:...try:...print(next(f),end="")...except:...sys.exit()1,11,22,33,55,88,1313,2121,3434,5555,8989,1441類的定義和專有方法目錄認識面向?qū)ο缶幊?
對象的屬性和方法3迭代器4繼承5繼承面向?qū)ο蟮木幊處砗锰幹皇谴a的重用,實現(xiàn)這種重用方法之一是通過繼承機制。繼承是兩個類或多個類之間的父子關(guān)系,子類繼承了基類的所有公有數(shù)據(jù)屬性和方法,并且可以通過編寫子類的代碼擴充子類的功能。繼承實現(xiàn)了數(shù)據(jù)屬性和方法的重用,減少了代碼的冗余度。那么我們何時需要使用繼承呢?如果我們需要的類中具有公共的成員,且具有一定的遞進關(guān)系,那么我們的就可以使用繼承,且讓結(jié)構(gòu)最簡單的類作為基類。一般來說,子類是父類的特殊化,如下面的關(guān)系:
哺乳類動物——>狗——>特定狗種繼承繼承語法:class子類名(基類名1,基類名2,…)基類寫在括號里,如果有多個基類,則需要全部都寫在括號里,這種情況稱為多繼承。在Python中繼承有下面一些特點:
在繼承中基類初始化方法__init__不會被自動調(diào)用。如果希望子類調(diào)用基類的__init__方法,需要在子類的__init__方法顯示調(diào)用它。這與C++和C#區(qū)別很大。
在調(diào)用基類的方法時,需要加上基類的類名前綴,且?guī)蟬elf參數(shù)變量。注意在類中調(diào)用在該類定義的方法是不需要self參數(shù)的。Python總是首先查找對應(yīng)類的方法,如果在子類沒有對應(yīng)的方法,Python才會在繼承鏈的基類中按順序查找。在Python繼承中,子類不能訪問基類的私有成員。繼承繼承在程序中,繼承描述的是事物之間的所屬關(guān)系,例如貓和狗都屬于動物,程序中便可以描述為貓和狗繼承自動物;同理,波斯貓和巴厘貓都繼承自貓,而沙皮狗和斑點狗都繼承足夠,如下所示:繼承繼承#定義一個父類,如下:classCat:name='貓'color='white'defrun(self):print(,'--在跑')#定義一個子類,如下:classBosi(Cat):defsetName(self,newName):=newNamedefeat(self):print(,'--在吃')
bs=Bosi()print('bs的名字為:',)print('bs的顏色為:',bs.color)bs.eat()bs.setName('波斯')bs.run()繼承多繼承#定義一個父類
classA:defprintA(self):print('----A----')#定義一個父類
classB:defprintB(self):print('----B----')#定義一個子類,繼承自A、BclassC(A,B):defprintC(self):print('----C----')obj_C=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 煉焦煤制備工崗前基礎(chǔ)在崗考核試卷含答案
- 區(qū)塊鏈應(yīng)用操作員操作規(guī)程強化考核試卷含答案
- 三月三掃墓請假條
- 2025年半柔半剛射頻同軸電纜項目合作計劃書
- 2026年智能門窗光伏供電片項目可行性研究報告
- 2025年江蘇省鎮(zhèn)江市中考物理真題卷含答案解析
- 2025年四川省資陽市中考物理真題卷含答案解析
- 2025年臨床核心制度培訓(xùn)考核試卷(含答案)
- 2025年地質(zhì)勘探員安全生產(chǎn)知識定期考核題目及答案
- 選礦工技能鞏固考核試卷及答案
- 2025年時事政治試題全年答案
- 財務(wù)共享服務(wù)2025年發(fā)展趨勢與挑戰(zhàn)研究報告
- (初級)小紅書種草營銷師認證考試真題試題(附答案)
- 2026 年廣西普通高等教育專升本考試(含高職升本新大綱)數(shù)學(xué)第16套(含答案解析)
- 頭發(fā)白轉(zhuǎn)黑課件
- 周邊建筑物、原地下管網(wǎng)及市政設(shè)施專項保護方案
- 2024-2025學(xué)年貴州省畢節(jié)市七星關(guān)區(qū)七年級(上)期末數(shù)學(xué)試卷(含答案)
- 家紡產(chǎn)品綠色生命周期管理
- 2025年中國PICC導(dǎo)管數(shù)據(jù)監(jiān)測研究報告
- 設(shè)備日常點檢管理制度
- QGDW11059.2-2018氣體絕緣金屬封閉開關(guān)設(shè)備局部放電帶電測試技術(shù)現(xiàn)場應(yīng)用導(dǎo)則第2部分特高頻法
評論
0/150
提交評論