1. 程式人生 > >Python 面向對象--繼承,實現,依賴,關聯,聚合,組合

Python 面向對象--繼承,實現,依賴,關聯,聚合,組合

bsp 類型 可見 類定義 依賴 port sdn from class

一. 繼承

繼承指的是子類繼承父類除私有內容以外的其他所有內容, 並且子類具有增加自己新內容的能力.

舉例說明:

class Animal:
print("吃是動物的本能")

class Cat(Animal):
def cat_eat(self):
print("貓兒優雅地吃東西")

c = Cat()
c.cat_eat()

# 以上代碼執行結果:
# 吃是動物的本能
# 貓兒優雅地吃東西

二. 接口實現(約束,重寫)

1. 用普通類定義接口(推薦使用)

舉例說明:

class Animal:    # 父類Animal具有約束作用, 子類必須對父類的方法進行重寫
    def
eat(self): pass def sleep(self): pass class Dog(Animal): def eat(self): print("狗吃狗糧") def sleep(self): print("狗趴著睡") class Cat: def eat(self): print("貓吃貓糧") def sleep(self): print("貓躺著睡") dog = Dog() dog.eat() cat = Cat() cat.sleep()

2. 用抽象類和抽象函數實現方法(不推薦,了解即可)

舉例說明:

from abc import ABCMeta, abstractmethod

class Animal(metaclass=ABCMeta):  # 表示抽象類
    @abstractmethod  # 加裝飾器
    def eat(self): pass

class Dog(Animal):
    def eat(self):
        print("狗吃狗糧")

class Cat:
    def eat(self):
        print("貓吃貓糧")

dog = Dog()
dog.eat()

cat = Cat()
cat.eat()            

三. 依賴

可以簡單的理解, 就是一個類 A 使用到了另一個類 B, 而這種使用關系是具有偶然性的,臨時性的 非常弱的, 但是 B 類的變化會影響到 A. 比如某人要過河,需要借用一條船,此時人與船之間的關系就是依賴. 表現在代碼層面為: 類 B 作為參數被類 A 在某個method 方法中使用.

舉例說明:

class Person:
    def __init__(self, name):
        self.name = name
    def call_up(self, cellphone):
        print("%s正在使用%s打電話" % (self.name, cellphone.name))
        cellphone.call()

class Cellphone:
    def __init__(self, name):
        self.name = name
    def call(self):
        print("%s正在為您呼叫" % self.name)

person = Person("王乃卉")
cellphone = Cellphone("iPhoneX")

person.call_up(cellphone)

# 以上代碼執行結果是:
# 王乃卉正在使用iPhoneX打電話
# iPhoneX正在為您呼叫

四. 關聯

關聯體現的是兩個類, 或者類與接口之間語義級別的一種強依賴關系.
比如我和我的朋友, 這種關系比依賴更強, 不存在依賴關系的偶然性, 關系也不是臨時性的, 一般是長期性的, 而且雙方的關系一般是平等的, 關聯可以是單向,雙向的.
表現在代碼層面為: 被關聯類 B 以類屬性的形式出現在關聯類 A 中, 也可能是關聯類 A 引用了一個類型為被關聯類 B 的全局變量.

1. 聚合

聚合是關聯關系的一種特例, 它體現的是整體與部分,擁有的關系, 即 has-a 的關系. 此時整體與部分之間是可分離的, 他們可以具有各自的生命周期, 部分可以屬於多個整體對象, 也可以為多個整體對象享. 比如計算機與 CPU, 公司與員工的關系等.
表現在代碼層面, 和關聯關系是一致的,只能從語義級別來區分.

2. 組合

組合也是關聯關系的一種特例, 它體現的是一種 contains-a 的關系, 這種關系比聚合更強, 也稱為強聚合. 它同樣體現整體與部分間的關系, 但此時整體與部分是不可分的, 整體的生命周期結束也就意味著部分的生命周期結束. 比如你和你的大腦. 表現在代碼層面, 和關聯關系是一致的,只能從語義級別來區分.

輔助理解:

大雁喜歡熱鬧害怕孤獨, 所以它們一直過著群居的生活, 這樣就有了雁群. 每一只大雁都有自己的雁群, 每個雁群都有很多大雁, 大雁與雁群的這種關系就可以稱之為聚合. 另外, 每只大雁都有兩只翅膀, 大雁與雁
翅的關系就叫做組合. 由此可見, 聚合的關系明顯沒有組合緊密, 大雁不會因為它們的首領將雁群解散而無法生存, 而雁翅就無法脫離大雁而單獨生存.
所以說, 聚合關系的類具有不同的生命周期, 而組合關系的類具有相同的生命周期.

----------------------------------------------------------------

參考資料:

1. python的幾種實現方式

2. python中的接口

3. 面向對象中的聚合與耦合

----------------------------------------------------------------

Python 面向對象--繼承,實現,依賴,關聯,聚合,組合