1. 程式人生 > >Python基礎18_類與類之間的關係

Python基礎18_類與類之間的關係

類與類之間的關係
    依賴關係. 關聯關係. 組合關係. 聚合關係. 繼承關係. 實現關係
一. 依賴關係
    執行某個動作的時候, 需要藉助某個東西, 但這個東西不是絕對的, 此時關係是最輕的, 隨時可以更換另外一種東西執行動作,  通過引數的傳遞把另外一個類的物件傳遞進來
二. 關聯關係. 組合關係. 聚合關係(物件裡面埋物件)
    這三個在程式碼寫法上是一樣的, 但是含義是不一樣的
    1. 關聯關係
    兩種事物必須是互相關聯的, 但在某些特殊情況下是可以更改和更換的
    一對一關係:    在初始化的時候給一個物件的屬性設定成另一個類的物件, 把屬性和物件聯絡起來
    一對多關係:
    2. 聚合關係
    屬於關聯關係的一個特例, 側重點是xxx和xxx聚合成xxx, 各有各的生命週期, 
    3. 組合關係
    屬於關聯關係中的一個特例, 組合關係比聚合關係要緊密
三. 繼承關係
    子類在不影響父類的程式執行的基礎上對父類進行的擴充和擴充套件, 這裡, 把父類成為超類或者基類, 子類被稱為派生類
    類名和物件預設是可以作為字典的key的, 可以hash, 即字典的key可以是物件或者類
    self: 誰呼叫的就是誰, 型別是根據呼叫方物件來變換的, 訪問順序: 永遠是先找自己的, 自己的找不到再找父類的
四. 類中的特殊成員
    帶雙下劃線的, 這些方法在特殊的場景會自動的執行
    __init__(self):
        類名()    會自動執行, 初始化操作, 
    __call__(self, *args, **kwargs):
        物件()    會自動執行, 為了物件可以被呼叫
    __getitem__(self, item):
        物件[key]    會自動執行, 
    __setitem__(self, key, value):
        物件[key] = value    會自動執行
    __delitem__(self, key):
        del 物件[key]    會自動執行
    __add__(self, other):
        物件 + 物件    自動執行
    __enter__(self):
    __exit__(self, exc_type, exc_val, exc_tb):
        with 物件 as 變數     會自動執行, 先執行__enter__, 再執行__exit__
    __str__(self):
        列印物件的時候會自動執行 返回該物件的字串變現形式
    __repr__(self):
        返回該物件的官方字串表現形式
    __hash__(self):
        __hash__ == None    物件就不可雜湊了
    __new__(cls, *args, **kwargs):
        真正的構造方法, 建立物件時可以開闢空間, 所有物件的建立都是通過__new__實現
        object基類預設有_new__
五. 建立物件的步驟
    1. 載入類
    (給類建立一個名稱空間, 存放類變數, 此時不建立類物件, 也能使用類變數)
    2. 建立物件: 開闢記憶體(__new__), 初始化(__init__)
    (先找類, 根據類名來開闢記憶體執行類中的__new__和__init__, 返回物件)
    3. 操作物件