iT邦幫忙

2022 iThome 鐵人賽

DAY 27
0

封裝

為何要這樣設計
有些屬性或方法只想在類別裡面使用不想公開,保護重要的邏輯。
優點

  1. 將變化隔離(透過加上底線無法外部存取達到隔離
  2. 提高復用性(就像安全性一樣,會一直重複使用到呼叫介面的端口
  3. 提高安全性(因為封裝好後,對外只提供介面,內部細節的部分看不到
class DoWhat:
    def work(self):
        print("Working")
        self.__sleep()

    def __sleep(self):
        print("Sleeping")

User = DoWhat()
User.work()   #Working  Sleeping

User.__sleep()   #AttributeError: 'DoWhat' object has no attribute '__sleep'

繼承

為何要這樣設計
兩個類別之間有共用的屬性或函式,繼承後就可以拿出來用才不會一直重複。
優點

  1. 子類擁有父類的所有屬性、方法,提高了程式碼的可擴充套件性
  2. 實現程式碼的重用,相同的程式碼不需要重複編寫
  3. 子類繼承的同時,可以重新定義屬性或重寫方法,就可以覆蓋父類別原有的東西成為子類獨有的
class Math:
    def add(self, x, y):
        return x + y


class Test(Math):
    def caculate(self):
        A = 100
        B = 20
        add = self.add(A, B)
        print(add)


test = Test()
test.caculate()   #120 

多型

為何要這樣設計
讓各類別有一致性的介面,方便擴充及維護。
優點

  1. 易於擴充(未來要再增加新的登入機制或交通工具,都能非常容易的透過新增類別來進行擴充
  2. 降低類別間的相依性(各類別依據共同介面來各自實作,所以類別間的相依性降低,在新增需求功能時,不用擔心會影響到其他類別的實作。
class Name:
    def who(self):
        print("who am i ?")

        
class Danny(Name):
    def me(self):
        print("I am Dany")

        
class Jason(Name):
    def me(self):
        print("I am Jason")

        
Danny = Danny()
Danny.me()

Jason = Jason()
Jason.me()

這邊的意思是,如果子類別跟父類別有相同名稱的方法,子類別的會覆蓋父類別的方法,但如果子類別沒有的話就會執行父類別的方法,結果如下。

class Father:
    def me(self):
        print("I am Father.")


class Son(Father):
    # def me(self):
    #     print("I am Son.")
    pass


son = Son()
son.me()   #I am Son.
# 把son的me方法註解掉後
son.me()   #I am Father.

上一篇
Day26 linebot & 爬蟲 之實作交易機器人-相關新聞
下一篇
Day28 SOLID原則 Demo
系列文
Python之虛擬貨幣API實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言