怎樣進(jìn)行python異常處理和面向?qū)ο缶幊痰姆治?創(chuàng)新互聯(lián)

本篇文章給大家分享的是有關(guān)怎樣進(jìn)行python異常處理和面向?qū)ο缶幊痰姆治觯【幱X(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

創(chuàng)新互聯(lián)建站從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元昌黎做網(wǎng)站,已為上家服務(wù),為昌黎各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220

    異常處理和面向?qū)ο缶幊?,是python編程中,比較重要的基礎(chǔ)。在實(shí)際生產(chǎn)編程設(shè)計(jì)和開(kāi)發(fā)中,異常處理和面向讀象都是必須在設(shè)計(jì)和開(kāi)發(fā)過(guò)程中充分考慮的。
    對(duì)于python開(kāi)發(fā)和面向?qū)ο筮@兩部分基礎(chǔ),用一個(gè)python程序進(jìn)行封裝說(shuō)明,結(jié)果如下:

  • #!/usr/bin/env python

  • # _*_ coding:utf-8 _*_

  • #################

  • #異常處理

  • #################

  • print '''

  • 異常處理是用于處理軟件或信息系統(tǒng)中出現(xiàn)的異常狀況的一種機(jī)制,及超出程序正常執(zhí)行流程的某些特殊條件。

  • 在當(dāng)前主流的編程語(yǔ)言的錯(cuò)誤處理機(jī)制中,異常處理逐步替代了error code錯(cuò)誤的處理方式,異常處理分離了接收和處理錯(cuò)誤代碼。

  • 這個(gè)功能理清編程思路,使代碼的可讀性增強(qiáng),方便維護(hù)者閱讀和理解。

  • '''

  • print

  • print '''

  • 異常處理,有稱錯(cuò)誤處理,提供了程序運(yùn)行時(shí)出現(xiàn)的任何意外或異常情況的方法。

  • python異常處理使用try,catch,else,finally等關(guān)鍵字來(lái)嘗試可能未成功的操作,處理失敗及正常情況,在事后清理資源。

  • python異常捕捉及處理的語(yǔ)法如下:

  • #可能會(huì)發(fā)生異常的程序塊

  • try:

  •             block_try

  • #第1種except形式

  • except Exception1:

  •             block_when_exception1_happen

  • #第2種except形式

  • except (Exception2, Exception3, Exception4):

  •             block_when_exception2_or_3_or_4_happen

  • #第3種except形式

  • except Exception5, variance

  •     block_when_exception5_happen

  • #第4種except形式

  • except (Exception6, Exception7),variance

  •     block_when_exception6_or_7_happen

  • #第5種except形式

  • except:

  •             blok_for_all_other_exceptions

  • #當(dāng)沒(méi)有出現(xiàn)異常情況時(shí)的處理

  • else:

  •             block_for_no_exceptions

  •     

  • #無(wú)論是否出現(xiàn)異常,最后要做的處理

  • finally:

  •             block_anyway

  • '''

  • print

  • print '''

  • 異常處理規(guī)則分為四部分:

  •     可能產(chǎn)生異常的代碼,寫在try塊中,try塊中發(fā)生異常,則try塊剩余的代碼被終止;

  •     異常判斷和發(fā)生時(shí)的代碼,寫在except中,具有有5種形式:

  •     1是一種異常發(fā)生時(shí),執(zhí)行except塊內(nèi)代碼;2是捕獲多種異常,執(zhí)行代碼;3是捕獲的異??梢赞D(zhuǎn)換為變量;4是捕獲多種異常轉(zhuǎn)換為變量;5是捕獲任何異常;

  •     每種except捕獲形式,都可以定義多次,系統(tǒng)會(huì)逐個(gè)檢查,但有一個(gè)滿足條件時(shí),執(zhí)行except塊,其他的不再檢查和執(zhí)行,類似于多個(gè)if-else條件;

  •     else是可選模塊,定義如果沒(méi)有發(fā)生異常時(shí),需要做的處理;

  •     finally是可選模塊,無(wú)論try模塊是否發(fā)生異常,都會(huì)執(zhí)行這里的代碼;

  • 總結(jié)一下,try模塊是程序?qū)ο?,except是異常捕獲提交及應(yīng)對(duì),else是沒(méi)有異常時(shí)的處理,finally是最后必定執(zhí)行的內(nèi)容,與是否出現(xiàn)異常無(wú)關(guān)。

  • '''

  • print

  • #簡(jiǎn)單異常處理示例

  • try:

  •     result = 3/0

  •     print "This is never been called"

  • except:

  •     print "Exception happened"

  • finally:

  •     print "Process finished!"

  •     

  • #多個(gè)except異常捕獲模塊的示例

  • try:

  •     myList = [4, 6]

  •     print myList[10]

  •     print "This is never been called"

  • except ZeroDivisionError, e:

  •     print "ZeroDivisionError happened"

  •     print e

  • except (IndexError, EOFError), e:

  •     print "Exception happened"

  •     print e

  • except :

  •     print "Unkown exception happened"

  • else:

  •     print "No exception happened!"

  • finally:

  •     print "Process finished!"

  •     

  •     

  • print

  • print '''

  • 除了系統(tǒng)預(yù)定義的異常,還可以定義自己的特定邏輯異常。

  • 自己定義異常,建立一個(gè)繼承系統(tǒng)異常的子類,并且在需要引發(fā)該異常時(shí)用raise語(yǔ)句拋出該異常。

  • '''

  • #自定義異常示例

  • import sys

  • class MyError(Exception):

  •     def __str__(self):

  •         return " I'm a self-defined Error! "

  •     

  • def main_except():

  •     try:

  •         print "**********Start of main()**********"

  •         if len(sys.argv) == 1:

  •             raise MyError()

  •         print "**********End of main()**********"

  •     except MyError, e:

  •         print e

  • main_except()

  • #################

  • #面向?qū)ο缶幊?/p>

  • #################

  • print

  • print '''

  • 面向讀象編程,與面向過(guò)程編程,函數(shù)式編程的特點(diǎn)是:

  •     面向過(guò)程:根據(jù)業(yè)務(wù)邏輯從上到下寫壘代碼

  •     函數(shù)式:將某功能代碼封裝到函數(shù)中,日后便無(wú)需重復(fù)編寫,僅調(diào)用函數(shù)即可

  •     面向?qū)ο螅簩?duì)函數(shù)進(jìn)行分類和封裝,讓開(kāi)發(fā)“更快更好更強(qiáng)...”

  • 面向?qū)ο缶幊淌且环N編程方式,此編程方式的落地需要使用 “類” 和 “對(duì)象” 來(lái)實(shí)現(xiàn),所以,面向?qū)ο缶幊唐鋵?shí)就是對(duì) “類” 和 “對(duì)象” 的使用。

  •   類就是一個(gè)模板,模板里可以包含多個(gè)函數(shù),函數(shù)里實(shí)現(xiàn)一些功能

  •   對(duì)象則是根據(jù)模板創(chuàng)建的實(shí)例,通過(guò)實(shí)例對(duì)象可以執(zhí)行類中的函數(shù)

  • 面向?qū)ο蟮娜筇匦允侵福悍庋b、繼承和多態(tài)。

  • '''

  • print

  • print '''

  • 面向?qū)ο笫侵谐绦蛟O(shè)計(jì)規(guī)范,也是一種程序開(kāi)發(fā)方法。python即可支持函數(shù)式編程,又可以支持面向?qū)ο缶幊?,面向?qū)ο缶幊炭梢詫?shí)現(xiàn)函數(shù)式編程的功能,函數(shù)式編程則不一定。

  • 一般能夠使用面向?qū)ο缶幊?,就盡量使用面向?qū)ο缶幊虂?lái)實(shí)現(xiàn)。有的高級(jí)函數(shù),如C#和Java只支持面向?qū)ο缶幊蹋恢С趾瘮?shù)式編程。

  • 面向?qū)ο?,?duì)象是指類的實(shí)例,類是創(chuàng)建對(duì)象的模板,一個(gè)類可以創(chuàng)建多個(gè)對(duì)象,每個(gè)對(duì)象都是類類型的一個(gè)變量;創(chuàng)建對(duì)象的過(guò)程,也叫作類的實(shí)例化。

  • 面向?qū)ο缶幊讨械闹饕拍钣校?/p>

  •     類 class:定義了一個(gè)事物抽象的特點(diǎn)。類定義了事物的屬性和它可以做到的行為,一個(gè)類中可以有成員函數(shù)和成員變量,在面向讀象中,成員函數(shù)叫方法,成員變量叫屬性;

  •     對(duì)象 object:是類的實(shí)例,每個(gè)類可以有若干個(gè)被實(shí)例化的對(duì)象。在OS中,熊給讀象分配內(nèi)存,不會(huì)給類分配內(nèi)存;

  •     繼承 inheritance:是指通過(guò)一個(gè)已有的類(父類)定義另外一個(gè)類(子類),子類共享父類開(kāi)放的屬性和方法。子類的對(duì)象是一個(gè)子類的實(shí)例,還是父類的一個(gè)實(shí)例。

  •     封裝性 encapsulation:封裝性是指在定義時(shí),可以將不能或不需要其他類知道的成員定義成私有成員,而只公開(kāi)需要使用的成員,以達(dá)到信息隱藏和簡(jiǎn)化的作用。

  •     多態(tài)性 polymorphism:是指同一方法作用于不同的讀象,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結(jié)果,在實(shí)現(xiàn)上,多態(tài)性是孕婦開(kāi)發(fā)者將父對(duì)象的變量設(shè)置為對(duì)子對(duì)象的引用,賦值之后,父對(duì)象變量就可以根據(jù)當(dāng)前的賦值給子對(duì)象的特性以不同方式運(yùn)作。

  • 隨著面向?qū)ο缶幊蘋OP的普及,面向?qū)ο笊婕癘OD也逐漸成熟,形成了以UML為代表的標(biāo)準(zhǔn)建模語(yǔ)言。

  • UML是一個(gè)支持模型化和軟件系統(tǒng)開(kāi)發(fā)的圖形化語(yǔ)言,為軟件開(kāi)發(fā)所有階段提供了模型化和可視化支持,包括有需求分析到規(guī)格,再到構(gòu)造和配置的所有階段。

  • '''

  • print

  • print "類和讀象是面向?qū)ο缶幊痰幕A(chǔ),通過(guò)在類名后面加小括號(hào)可以直接實(shí)例化類來(lái)獲得讀象變量,使用對(duì)象變量可以訪問(wèn)成員函數(shù)和成員變量。在構(gòu)造函數(shù)中不能有返回值。"

  • #定義一個(gè)類

  • class MyClass(object):

  •     message = "Hello, Developer."

  •     

  •     def show(self):

  •         print self.message

  • print MyClass.message

  • MyClass.message = "Good Morning!"

  • print MyClass.message

  • inst = MyClass()

  • inst.show()

  • print

  • print "構(gòu)造函數(shù)是一種特殊的類成員方法,主要用來(lái)在創(chuàng)建對(duì)象時(shí),初始化對(duì)象,為對(duì)象成員賦初始值。python中構(gòu)造函數(shù)用 __init__命名,為類添加一個(gè)構(gòu)造方法,實(shí)例一個(gè)對(duì)象。"

  • #定義類,增加構(gòu)造函數(shù)示例

  • class MyClass(object):

  •     message = 'Hello, Developer.'

  •     

  •     def show(self):

  •         print self.message

  •         

  •     def _init__(self):

  •         print "Constructor is called"

  • inst = MyClass()

  • inst.show()

  • #用默認(rèn)參數(shù)的方式,實(shí)現(xiàn)多種方式構(gòu)造對(duì)象

  • class MyClass(object):

  •     message = "Hello, Developer."

  •     

  •     def show(self):

  •         print self.message

  •     

  •     def __init__(self, name = "unset", color = "black"):

  •         print "Constructor is called with params: ", name, " ", color

  •     

  • inst = MyClass()

  • inst.show()

  • inst2 = MyClass("David")

  • inst2.show()

  • inst3 = MyClass("Lisa", "Yellow")

  • inst3.show()

  • inst4 = MyClass(color = "Green")

  • inst4.show()

  • print

  • print '''

  • 析構(gòu)函數(shù),是構(gòu)造函數(shù)的反向函數(shù),在銷毀釋放對(duì)象時(shí),調(diào)用析構(gòu)函數(shù)。析構(gòu)函數(shù)往往做清理善后工作,例如數(shù)據(jù)庫(kù)連接,可以用析構(gòu)函數(shù)是否對(duì)數(shù)據(jù)庫(kù)資源的占用。

  • python中為類定義析構(gòu)函數(shù)的方法是在類中定義一個(gè) __del__ 的沒(méi)有返回值和參數(shù)的函數(shù)。

  • 與Java類似,python解釋器的堆中存儲(chǔ)這正在運(yùn)行程序鎖建立的對(duì)象,不需要形式釋放;如果需要顯示銷毀對(duì)象,就使用del關(guān)鍵字。

  • '''

  • #創(chuàng)建類,調(diào)用析構(gòu)函數(shù)示例

  • class MyClass(object):

  •     message = 'Hello, Developer.'

  •     

  •     def show(self):

  •         print self.message

  •     

  •     def __init__(self, name = 'unset', color = "black"):

  •         print "Constructor is called with params: ", name, " ", color

  •     

  •     def __del__(self):

  •         print "Destructor is called!"

  •     

  • inst = MyClass()

  • inst.show()

  • inst2 = MyClass("David")

  • inst2.show()

  • del inst, inst2

  • inst3 = MyClass("Lisa", "Yellow")

  • inst3.show()

  • del inst3

  • print

  • print "類中有共享成員變量,如上面類中的message。如果要定義每個(gè)對(duì)象自己的成員變量,就要在構(gòu)造函數(shù)中定義self引用的變量,即實(shí)例成員變量。"

  • #實(shí)例成員變量示例

  • class MyClass(object):

  •     message = "Hello, Developer."

  •     

  •     def show(self):

  •         print self.message

  •         print "Here is %s in %s!" % (self.name, self.color)

  •     

  •     def __init__(self, name = "unset", color = "black"):

  •         print "Constructor is called with params : ", name, " ", color

  •         self.name = name

  •         self.color = color

  •     

  •     def __del__(self):

  •         print "Destructor is called for %s!" % self.name

  •     

  • inst2 = MyClass("David")

  • inst2.show()

  • print "Color of inst2 is ", inst2.color, "\n"

  • inst3 = MyClass("Lisa", "Yellow")

  • inst3.show()

  • print "Name of inst3 is ", inst3.name, "\n"

  • del inst2, inst3

  • print '''

  • 訪問(wèn)類時(shí),類成員函數(shù)與實(shí)例綁定,只能通過(guò)對(duì)象訪問(wèn)而不能通過(guò)類名訪問(wèn)。

  • python中支持兩種基于類名訪問(wèn)成員的函數(shù):靜態(tài)函數(shù)和類函數(shù),它們的不同點(diǎn)是類函數(shù)有一個(gè)隱形參數(shù)cls可以用來(lái)獲取類信息,而靜態(tài)函數(shù)沒(méi)有改參數(shù)。

  • 靜態(tài)函數(shù)使用裝飾器@staticmethod定義,類函數(shù)使用 裝飾器@classmethod 定義。

  • '''

  • #靜態(tài)函數(shù)和類函數(shù)的代碼示例

  • class MyClass(object):

  •     message = "Hello, Developer."

  •     

  •     def show(self):

  •         print self.message

  •         print "Here is %s in %s !" % (self.name, self.color)

  •     

  •     @staticmethod

  •     def printMessage():

  •         print "print Message is called"

  •         print MyClass.message

  •     

  •     @classmethod

  •     def createObj(cls, name, color):

  •         print "Object will be created: %s(%s, %s)" % (cls.__name__, name, color)

  •         return cls(name, color)

  •     

  •     def __init__(self, name = "unset", color = "black" ):

  •         print "Constructor is called with params: ", name, " ", color

  •         self.name = name

  •         self.color = color

  •         

  •     def __del__(self):

  •         print "Destructor is called for %s !" % self.name

  •         

  • MyClass.printMessage()

  • inst = MyClass.createObj("Toby", "Red")

  • print inst.message

  • del inst

  • print

  • print '''

  • 封裝性,是面向讀象編程的重要特點(diǎn),python也提供了不讓外部看到成員吟唱起來(lái)的私有成員機(jī)制。

  • 但與大多數(shù)編程語(yǔ)言用public,private關(guān)鍵字表達(dá)可見(jiàn)范圍的方法不同,python指定變量名格式的方法定義私有成員,以雙下劃線__開(kāi)始命名的成員都是是有成員變量。

  • '''

  • #封裝,私有成員示例代碼

  • class MyClass(object):

  •     def __init__(self, name = "unset", color = "black"):

  •         print "Constructor is called with params: ", name, " ", color

  •         self.__name = name

  •         self.__color = color

  •     

  •     def __del__(self):

  •         print "Destructor is called for %s!" % self.__name

  •     

  • inst = MyClass("Jojo", "White")

  • del inst

  • print '''

  • 繼承,類之間的繼承是面向?qū)ο笤O(shè)計(jì)的重要方法,通過(guò)繼承可以簡(jiǎn)化代碼和優(yōu)化設(shè)計(jì)模式。

  • python類在定義時(shí),可以在小括號(hào)中指定基類,所有python類都是object類型的子類,語(yǔ)法如下:

  • class BaseClass(object):      #父類定義

  •     block_class

  •     

  • class SubClass(BaseClass):    #子類定義

  •     block_class

  • 子類除了具備自己的 block_class 中定義的特性,還從父類繼承了非私有特性。

  • 在子類的析構(gòu)函數(shù)中調(diào)用基類的析構(gòu)函數(shù),是一種比較好的方法,但這樣可能導(dǎo)致父類資源不能如期被釋放。

  • '''

  • #繼承,子類繼承父類示例

  • class Base(object):

  •     def __init__(self):

  •         print "Constructor fo Base is called !"

  •     

  •     def __del__(self):

  •         print "Destructor of Base is called !"

  •     

  •     def move(self):

  •         print "move called in Base !"

  •     

  • class SubA(Base):

  •     def __init__(self):

  •         print "Constructor of subA is called ! "

  •     

  •     def move(self):

  •         print "move called in subA ! "

  •         

  • class SubB(Base):

  •     def __del__(self):

  •         print "Destructor of SubB is called ! "

  •         super(SubB, self).__del__()

  •     

  • instA = SubA()

  • instA.move()

  • del instA

  • print "-----------------------"

  • instB = SubB()

  • instB.move()

  • del instB

  • print

  • print "python中允許類的多繼承,也就是一個(gè)子類可以有多個(gè)基類。"

  • #一個(gè)子類,繼承多個(gè)父類示例

  • class BaseA(object):

  •     def move(self):

  •         print "move called in BaseA ! "

  •     

  • class BaseB(object):

  •     def move(self):

  •         print "move called in BaseB ! "

  • class BaseC(BaseA):

  •     def move(self):

  •         print "move called in BaseC ! "

  •     

  • class Sub(BaseC, BaseB):

  •     pass

  •     

  • inst = Sub()

  • inst.move()


    該腳本執(zhí)行結(jié)果如下:

  • # python try.py

  • 異常處理是用于處理軟件或信息系統(tǒng)中出現(xiàn)的異常狀況的一種機(jī)制,及超出程序正常執(zhí)行流程的某些特殊條件。

  • 在當(dāng)前主流的編程語(yǔ)言的錯(cuò)誤處理機(jī)制中,異常處理逐步替代了error code錯(cuò)誤的處理方式,異常處理分離了接收和處理錯(cuò)誤代碼。

  • 這個(gè)功能理清編程思路,使代碼的可讀性增強(qiáng),方便維護(hù)者閱讀和理解。

  • 異常處理,有稱錯(cuò)誤處理,提供了程序運(yùn)行時(shí)出現(xiàn)的任何意外或異常情況的方法。

  • python異常處理使用try,catch,else,finally等關(guān)鍵字來(lái)嘗試可能未成功的操作,處理失敗及正常情況,在事后清理資源。

  • python異常捕捉及處理的語(yǔ)法如下:

  • #可能會(huì)發(fā)生異常的程序塊

  • try:

  •             block_try

  • #第1種except形式

  • except Exception1:

  •             block_when_exception1_happen

  • #第2種except形式

  • except (Exception2, Exception3, Exception4):

  •             block_when_exception2_or_3_or_4_happen

  • #第3種except形式

  • except Exception5, variance

  •     block_when_exception5_happen

  • #第4種except形式

  • except (Exception6, Exception7),variance

  •     block_when_exception6_or_7_happen

  • #第5種except形式

  • except:

  •             blok_for_all_other_exceptions

  • #當(dāng)沒(méi)有出現(xiàn)異常情況時(shí)的處理

  • else:

  •             block_for_no_exceptions

  •     

  • #無(wú)論是否出現(xiàn)異常,最后要做的處理

  • finally:

  •             block_anyway

  • 異常處理規(guī)則分為四部分:

  •     可能產(chǎn)生異常的代碼,寫在try塊中,try塊中發(fā)生異常,則try塊剩余的代碼被終止;

  •     異常判斷和發(fā)生時(shí)的代碼,寫在except中,具有有5種形式:

  •     1是一種異常發(fā)生時(shí),執(zhí)行except塊內(nèi)代碼;2是捕獲多種異常,執(zhí)行代碼;3是捕獲的異??梢赞D(zhuǎn)換為變量;4是捕獲多種異常轉(zhuǎn)換為變量;5是捕獲任何異常;

  •     每種except捕獲形式,都可以定義多次,系統(tǒng)會(huì)逐個(gè)檢查,但有一個(gè)滿足條件時(shí),執(zhí)行except塊,其他的不再檢查和執(zhí)行,類似于多個(gè)if-else條件;

  •     else是可選模塊,定義如果沒(méi)有發(fā)生異常時(shí),需要做的處理;

  •     finally是可選模塊,無(wú)論try模塊是否發(fā)生異常,都會(huì)執(zhí)行這里的代碼;

  • 總結(jié)一下,try模塊是程序?qū)ο?,except是異常捕獲提交及應(yīng)對(duì),else是沒(méi)有異常時(shí)的處理,finally是最后必定執(zhí)行的內(nèi)容,與是否出現(xiàn)異常無(wú)關(guān)。

  • Exception happened

  • Process

  • Exception happened

  • list index out of range

  • Process 

  • 除了系統(tǒng)預(yù)定義的異常,還可以定義自己的特定邏輯異常。

  • 自己定義異常,建立一個(gè)繼承系統(tǒng)異常的子類,并且在需要引發(fā)該異常時(shí)用raise語(yǔ)句拋出該異常。

以上就是怎樣進(jìn)行python異常處理和面向?qū)ο缶幊痰姆治?,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。

文章標(biāo)題:怎樣進(jìn)行python異常處理和面向?qū)ο缶幊痰姆治?創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://muchs.cn/article30/hesso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司網(wǎng)站收錄、做網(wǎng)站外貿(mào)網(wǎng)站建設(shè)、搜索引擎優(yōu)化、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化