python物件導向三大特性

來源:互聯網
上載者:User

標籤:中斷   c函數   print   pen   sel   寫法   python面向對   編程方式   總結   

物件導向的三大特性: 封裝、繼承和多態

一、封裝

封裝,顧名思義就是將內容封裝到某個地方,以後可以直接調用被封裝到某處的內容。

  - 將內容封裝到某處

  - 從某處調用被封裝的內容

第一步,將內容封裝到某處:

class Foo:    def __init__(self,name,age):        self.name=name        self.age=ageobj1=Foo(‘梅西‘,‘31‘)obj2=Foo(‘C羅‘,‘33‘)print(obj1.name,obj1.age)print(obj2.name,obj2.age)輸出結果:梅西 31C羅 33
View Code

self 是一個形式參數, 當執行 obj1=Foo(‘梅西‘,‘31‘),self 就等於obj1

          當執行obj2=Foo(‘C羅‘,‘33‘),self就等於obj2

第二部,從某處調用被封裝的內容:

  - 通過對象直接調用

  - 同過self間接調用

1,通過對象直接調用被封裝的內容(格式:對象.屬性名稱) 

class Foo:    def __init__(self,name,age):        self.name=name        self.age=ageobj1=Foo(‘梅西‘,‘31‘)print(obj1.name)      #直接調用obj1的name屬性print(obj1.age)         #直接調用obj1的age屬性obj2=Foo(‘C羅‘,‘33‘)print(obj2.name)     #直接調用obj2的name屬性print(obj2.age)        #直接調用obj2的age屬性
View Code

 2,執行類中的方法時,通過 self 間接調用被封裝的內容:

class Foo:    def __init__(self,name,age):        self.name=name        self.age=age    def detail(self):        print(self.name,self.age)obj1=Foo(‘梅西‘,‘31‘)obj1.detail()obj2=Foo(‘C羅‘,‘33‘)obj2.detail()>>>梅西 31C羅 33
View Code

綜上所述,對於物件導向的封裝來說,其實就是使用構造方法將內容封裝到對象中,然後通過對象直接或self間接擷取被封裝的內容。

 

練習一:在終端輸出如下資訊 

  • 小明,10歲,男,上山去砍柴
  • 小明,10歲,男,開車去東北
  • 小明,10歲,男,最愛大保健
  • 老李,90歲,男,上山去砍柴
  • 老李,90歲,男,開車去東北
  • 老李,90歲,男,最愛大保健
  • 老張... 
函數式物件導向

上述對比可以看出,如果使用函數式編程,需要在每次執行函數時傳入相同的參數,如果參數多的話...... 

物件導向只需要在建立對象時,將所需要的參數封裝到對象中,之後使用時,通過self間接去對象中取值即可。

二、繼承

物件導向中的繼承和我們現實生活中的繼承相同:即,子可以繼承父的內容。

例如:

  貓可以:喵喵叫,吃,喝,拉,撒

  狗可以:汪汪叫,吃,喝,拉,撒

如果我們要分別為貓和狗建立一個類,那麼就需要為貓和狗實現他們所有的功能,例如: 

class 貓:    def 喵喵叫(self):        print ‘喵喵叫‘    def 吃(self):        # do something    def 喝(self):        # do something    def 拉(self):        # do something    def 撒(self):        # do somethingclass 狗:    def 汪汪叫(self):        print ‘喵喵叫‘    def 吃(self):        # do something    def 喝(self):        # do something    def 拉(self):        # do something    def 撒(self):        # do something
View Code

 上述代碼可以看出,吃喝拉撒是貓和狗都具有的功能,而我們卻分別為貓和狗的類中編寫了兩次,如果使用繼承的思想,如下實現:

動物:吃、喝、拉、撒

  貓:喵喵叫、(貓繼承動物的功能)

  狗:汪汪叫、(狗繼承動物的功能)

class Animal:    def eat(self):        print "%s 吃 " %self.name    def drink(self):        print "%s 喝 " %self.name    def shit(self):        print "%s 拉 " %self.name    def pee(self):        print "%s 撒 " %self.nameclass Cat(Animal):    def __init__(self, name):        self.name = name        self.breed = ‘貓‘    def cry(self):        print ‘喵喵叫‘class Dog(Animal):        def __init__(self, name):        self.name = name        self.breed = ‘狗‘            def cry(self):        print ‘汪汪叫‘        # ######### 執行 #########c1 = Cat(‘小白家的小黑貓‘)c1.eat()c2 = Cat(‘小黑的小白貓‘)c2.drink()d1 = Dog(‘胖子家的小瘦狗‘)d1.eat()
View Code

所以對於物件導向的繼承來說,其實就是將多個類中共有的方法提取到父類中,子類繼承父類,而不必一一實現每個方法。

註:除了子類和父類的稱謂,也可以叫他們衍生類別和基類。

-- 多繼承

1、Python的類可以繼承多個類,Java和C#中則只能繼承一個類

2、Python的類如果繼承了多個類,那麼其尋找方法的方式有兩種,分別是:深度優先廣度優先

 

繼承順序

 注意:在上述尋找過程中,一旦找到,則尋找過程立即中斷,便不會再繼續找了

 三、多態

Pyhon不支援Java和C#這一類強型別語言中多態的寫法,但是原生多態,其Python崇尚“鴨子類型”。 

class F1:    passclass S1(F1):    def show(self):        print(‘S1.show‘)class S2(F1):    def show(self):        print(‘S2.show‘)# 由於在Java或C#中定義函數參數時,必須指定參數的類型# 為了讓Func函數既可以執行S1對象的show方法,又可以執行S2對象的show方法,所以,定義了一個S1和S2類的父類# 而實際傳入的參數是:S1對象和S2對象def Func(arg):    """Func函數需要接收一個F1類型或者F1子類的類型"""    arg.show()s1_obj = S1()Func(s1_obj)  # 在Func函數中傳入S1類的對象 s1_obj,執行 S1 的show方法,結果:S1.shows2_obj = S2()Func(s2_obj)  # 在Func函數中傳入Ss類的對象 ss_obj,執行 Ss 的show方法,結果:S2.show
View Code

以上就是本節對於物件導向初級知識的介紹,總結如下:

  • 物件導向是一種編程方式,此編程方式的實現是基於對  和 對象 的使用
  • 類 是一個模板,模板中封裝了多個“函數”供使用
  • 對象,根據模板建立的執行個體(即:對象),執行個體用於調用被封裝在類中的函數
  • 物件導向三大特性:封裝、繼承和多態

 

python物件導向三大特性

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.