iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0

淺談物件導向

  • 在使用過 Python 寫過一些程式之後,發現他看起來很像腳本
  • 往往在程式碼回顧的時候,覺得看起來像平鋪直述的句子,沒有起承轉合
  • 閱讀起來常常沒有頭緒,心裡都有一個聲音問自己:當初寫這些程式碼的人在想什麼、想幹嘛
  • 就算沒有修過正規的程式設計課程,還是多少會聽過物件物件導向開發
    • 關於物件導向,我想得很簡單
      • 類別:皮卡丘
      • 物件:小智的皮卡丘 皮神、閔川特的皮卡丘 馬奎爾
      • 屬性:身長、體重、Lv、LP、顏色 ... 都可以想像成 所有格 + 名詞
      • 方法:撞擊、十萬伏特、哀嚎,大多都是動詞

程式碼

  • 為了解決閱讀問題,所以在一開始就養成習慣把程式碼都寫整齊
    from pptx import Presentation
    from datetime import datetime
    
    
    class PPTBoss():
    
        def __init__(self) -> None:
            self.prs = None
    
        def read_from_template(self):
            with open('材料組進度報告 - 樣板.pptx', 'rb') as f:
                self.prs = Presentation(f)
                f.close()
    
        def gen_prs_title_page(self):
            title_slide_layout = self.prs.slide_layouts[2]
            slide = self.prs.slides.add_slide(title_slide_layout)
    
            title = slide.shapes[1]
            title.text = "材料組進度報告"
    
            subtitle = slide.shapes[0]
            subtitle.text = f"Rita - {datetime.now().strftime('%Y-%m-%d')}"
    
        def save_file(self, filename=None):
            if filename is None:
                filename = f'材料組進度報告_{datetime.today().strftime("%Y%m%d")}.pptx'
            self.prs.save(filename)
    
    
    if __name__ == '__main__':
        pptboss = PPTBoss()
        pptboss.read_from_template()
        pptboss.gen_prs_title_page()
        pptboss.save_file()
        print('done')
    

解說

  • 參考昨天產生的內容,標記出 Shape 的索引,是為了方便開發時,直接填入文字
    https://ithelp.ithome.com.tw/upload/images/20230905/20141784b4VzvUyQZd.png
  • 原本直接用 open('檔案', 'rb') 的做法,在 《深入淺出Python》 蠻前面的章節就提到不是一個好作法,因為沒有做 Error handling,萬一檔案不存在,或是權限不足等因素導致 open 的動作失敗,程式就掛掉了;我改寫成 with open
  • init() 作為類別的建構子,他會確保物件產出前,先做一輪設置
  • 關於屬性,常見的概念有 public 、 protect 、 private 這些
  • 把程式碼片段,根據目的歸入函式裡面

結論

  • 有了投影片雛形後還不夠,老闆如果看到我用了四天才做這麼一點點,一定非常火大的站在背後
  • 明天要準備投影片的內容了,產生他真正感興趣的東西才是!

上一篇
Day 3 - 從投影片母片開始
下一篇
Day 5 - 準備投影片資料,認識看板流與 Asana API
系列文
挽救肝指數 x 職場生存術 x 老闆愛看的投影片製造機30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言