fbpx
Python

Python多型(Polymorphism)實用教學

今天要來介紹的Python多型(Polymorphism)在物件導向設計中非常的重要,不論是設計模式(Design Patterns)或設計原則(Design Principles),都會有多型(Polymorphism)的概念。 使用多型(Polymorphism)來設計類別架構,能夠讓程式碼的相依性不會那麼高,並且透過統一的介面來彈性擴充功能。今天主要的重點有兩個部分: Python抽象方法(Abstract Method) 多型(Polymorphism) 一、Python抽象方法(Abstract Method) 要使用抽像方法(Abstract Method)的類別首先要繼承ABC(Abstract Base Class)類別,接著在抽象方法上方加上@abstractmethod裝飾詞(Decorator),並且不會有實作內容,如下範例: 由於抽象方法(Abstract Method)是抽象的,所以只要有抽象方法(Abstract Method)的類別就稱為抽象類別,是無法建立物件的,如下範例: 執行結果 錯誤訊息顯示無法實體化含有抽象方法(Abstract Method)的抽象類別。必須透過繼承(Inheritance)的類別來進行抽象方法(Abstract Method)的實作,如下範例: 執行結果 如果繼承(Inheritance)的類別(Class)沒有實作抽象類別中的抽象方法(Abstract Method),同樣視為抽象類別,也無法建立物件(Object)。範例中,FacebookLogin類別繼承(Inheritance)Login抽象類別,並且實作其login()抽象方法(Abstract Method),即可建立物件進行呼叫的動作。 所以,抽象方法(Abstract…
學程式助教
January 15, 2020
初探區塊鏈學程式主題小聚

學程式主題小聚–【區塊鏈懂不懂】

【區塊鏈懂不懂】 區塊鏈這個東西近幾年來一直是相當熱門的話題,大家也都紛紛加入這個行列,對於區塊鏈你真的懂它的原理嗎?我的回答是:「不懂」 在談到區塊鏈時,我們可以先來聊聊貨幣。 【貨幣是什麼】 〈貨幣的功能〉 交易媒介 計價單位 價值儲存 〈貨幣的演變〉 過去沒有貨幣產生的時代,人們所使用的方式為以物易物,但這種交易方式相當仰賴一個區域的共識,在A地區可能認為一頭牛換一帶米很合理,但在B地區卻認為一頭牛值得兩袋米的價值,因此,在不同地區進行交易,很難取得一定的共識。而後出現了所謂的金屬,但也因為金屬體積龐大,需要很大的儲存空間否金塊難以存放,到了現代,我們所使用的法幣(法定貨幣),由政府所發行的紙幣,成為了一種讓貨幣具有上述3種功能的一項媒介。 〈比特幣的誕生〉 然而,科技的進步促使了數位貨幣的出現,也就是大家現在所熟悉的—「比特幣」,由中本聰所發明,雖然目前仍然沒有人知道他的真實身分到底是誰,但卻也帶起了一股新的風潮。 比特幣是2009年所產生的一項數位資產,透過挖礦的流程來進行網路上的驗證交易。比特幣就像是礦產一般,而執行驗證交易的人則被稱之為礦工,以工作量來衡量成效,亦即努力做多少工作就會有多少收穫,預估在2040年時總量共有2100萬顆。 【區塊鏈原理】 〈錢包的概念〉 其實區塊鏈的原理並不難懂,Nic以錢包的概念作為舉例。只要有算法公式就可以隨機產生一個錢包(就將公式想像成數學的二元一次方程式,就會很容易理解囉!)。以下來看看Nic所提到的區塊鏈的名詞: 錢包地址—公鑰 操作錢包並與其配對的—私鑰 只要有了私鑰,就能夠回推出公鑰(也就是錢包的地址),這裡需要注意的是,只有私鑰可以回推找出公鑰,但不能由公鑰回推找出私鑰唷!說到這裡,一定有人還是會相當好奇,真的沒有辦法從公鑰推出私鑰嗎?這個就需要利用SHA-256加密算法來說明 〈什麼是SHA-256加密算法〉 SHA系列的算法是由美國國家安全局所設計出的一種密碼散列函數,又稱為安全散列算法(Secure Hash Algorithm),其版本有相當多種,而這裡我們所談到的是SHA-256加密算法。SHA-256加密算法可以想像成是:不論你輸入多少字,所得出來的結果都是256位的2進位字串,如此大的數字組合,造成了破解上的困難。所以說,在有SHA-256加密算法這層障礙下,如果你的錢包還是被偷了,那通常都不是因為被破解,而是透拓其他的手段被竊取,很多時候都是自己在沒注意的情況之下,落入別人的陷阱之中,不小心讓人知道你的私鑰。 【區塊鏈的生命週期】 有了錢包之後,要如何進行轉錢與收錢等動作呢?我們來看看Nic怎麼說:「區塊鏈就像是一本帳本,礦工們負責驗證交易並記錄帳本(持續不斷的挖礦),而每個區塊都會緊跟著上一個區塊,環環相扣。」…
學程式助教
January 15, 2020
科技實測

解鎖 AppStore 3種生產力工具常勝軍,你使用了嗎?

追求效率,提高效能的數位化時代 我們今天要來揭開新創環境與團隊中常使用也都是Appstore排行榜上面的常勝軍同學們哈哈哈 像我其實是重度懶癌、拖延症以及很難搞不清楚先後順序 是非常需要有工具來幫我管理我的時程以及事情 之前我看過一部日劇叫作「我要準時下班」,女主角有提過到一個觀念假設你每天花時間找文件,一年就有可能會浪費到150小時 150小時根本超好發揮的啊~為了要狠狠抓緊這150小時,來了解什麼樣的生產力工具能幫助你工作生活吧! Trello 對於排程你的工作、生活與假期總是亂糟糟,沒有一個好地方能幫你收納好你的行程嗎 Trello將待辦事項變成卡片的方式來呈現 你的每個待辦事項都能加以描述也能夠壓Deadline,一旦你的期限快到了Trello會進行提醒的動作唷 也能將你朋友加入至Trello板上面,跟你一起管理你們可能要共同處理的事情 像是旅遊,可以透過每張卡片的標題來進行有效率的溝通也可以朋友與夥伴間記住每個人的任務喔! 我自己是喜歡將卡片加上圖片會更清楚每張卡片是有什麼功能!               Quizlet 由於我近期正在學習Python,初心者真的都要收集與整理超多資訊的 為了練好功,有些好文章好概念都會想保存起來,我都會將筆記放在Quizlet中 也能省下很多時間在我的書籤中找到某個特定網站有我想要的概念 本身是Apple的用戶,但是備忘錄整個分類都超鬆散的~…
學程式助教
January 13, 2020
Python

Python繼承(Inheritance)實用教學

今天要來介紹的Python繼承(Inheritance)在物件導向設計中非常的重要,使用得當可以提高我們程式碼的重用性(Reusable)及維護性。 繼承(Inheritance)顧名思義,就是會有父類別(或稱基底類別Base Class)及子類別(Sub Class)的階層關係。子類別會擁有父類別公開的屬性(Attribute)及方法(Method)。 所以Python繼承(Inheritance)的概念就是將各類別(Class)會共同使用的屬性(Attribute)或方法(Method)放在一個獨立的類別(Class)中,其它的類別(Class)透過繼承(Inheritance)的方式來擁有,降低程式碼的重複性。   Python繼承(Inheritance)的重要觀念如下: 如何使用Python繼承(Inheritance) 方法覆寫(Method Overriding) 多層繼承(Multi-Level Inheritance) 多重繼承(Multiple Inheritance) 一、如何使用Python繼承(Inheritance) 在實務上開發應用程式時,隨著類別(Class)的增加,可能會發現有些類別(Class)擁有共同的屬性(Attribute)或方法(Method),如下範例: 範例中的Car及Airplane類別(Class)皆擁有drive()方法,當其有數百行程式碼時,在應用程式中重複出現是不好的且違背DRY(Don't Repeat Yourself)原則,未來這個方法(Method)有問題或邏輯改變了,就要修改好幾個地方,難於維護。 這時候就可以使用物件導向的繼承(Inheritance)設計,將共同的屬性(Attribute)或方法(Method)定義在一個類別(Class)中,而其它類別(Class)則透過繼承(Inheritance)的方式來擁有它,如下範例: 我們將Car及Airplane類別(Class)的共同方法drive()定義在一個新的Transportation類別(Class)中,並且新增一個屬性(Attribute)為color。 Transportation類別(Class)就叫父類別或基底類別(Base Class),而Car及Airplane類別(Class)就稱為子類別(Sub Class),在類別名稱的地方透過括號的方式來繼承(Inheritance),藉此擁有父類別公開的屬性(Attribute)及方法(Method),如下範例: 執行結果…
學程式助教
January 12, 2020
Python

解析Python物件導向設計的3種類型方法(Instance,Class,Static Method)

一、實體方法(Instance Method) Python類別(Class)中沒有加任何裝飾詞(Decorator)的方法(Method),至少要有一個self參數,於方法(Method)被呼叫時指向物件(Object),其後可以依需求增加額外參數,如下範例: 實體方法(Instance Method)透過self參數可以自由的存取物件(Object)的屬性(Attribute)及其他方法(Method),藉此來改變物件(Object)的狀態,如下範例:   執行結果 從執行結果可以看到,我們印出self參數時,結果顯示為Cars類別的物件(Object),也就是說呼叫實體方法(Instance Method)時,Python編譯器會傳入物件(Object),使得self參數指向該物件(Object)。   另一方面,當透過類別(Class)呼叫實體方法(Instance Class)時,這會使得Python編譯器無法將self參數指向物件(Object),而發生TypeError的錯誤,如下範例: 執行結果 另外,在實體方法(Instance Method)中可以透過self.__class__屬性(Attribute)來改變類別(Class)的狀態,如下範例:   執行結果 範例中實體方法(Instance Method)即利用self.__class__屬性(Attribute)來改變door類別屬性(Class Attribute)。 二、 類別方法(Class Method) Python類別(Class)中有@classmethod裝飾詞(Decorator)的方法(Method),被呼叫時,相較於實體方法(Instance Method)的self參數指向物件(Object),類別方法(Class Method)為cls參數,指向類別(Class),如下範例:…
學程式助教
January 8, 2020
科技實測

Apple Pay 前往菜市場 免零錢鈔票出門 一鍵支付完成

行動支付近期越來越普及,就算忘了帶錢包出門還是很安心呢! 目前南門市場、台北花市、新北果菜市場等大家熟知的傳統市場已經能使用Apple Pay進行行動支付了,而且不需要刷卡機,只要掃描QRCode 就能使用啦~ 走進南門市場 體驗行動支付 這次呢,科技要聞決定走進南門市場,體驗傳統市場導入新興支付科技 南門市場所使用的行動支付為QR Code條碼進行,他會直接跳轉到結帳的網頁 進入南門市場的門口就可以發現有大大的招牌寫著『免付現』,店家的門上也會有明顯的招牌可供我們掃描唷 在結帳櫃檯或是顯眼處就會掛上店家的支付條碼,消費者只要打開手機的QRcode掃瞄器(iPhone使用者只要打開相機) 掃描多元支付條碼後,就會進入至結帳付款頁面,輸入付款金額、選擇要支付的方式 (可以選擇Apple Pay、Google Pay或是信用卡刷卡),按下完成付款就能結帳。)                   那今天的目標,學程式助教們決定蔬菜來補充一下體力,不然天天打程式還是得需要營養均衡…
學程式助教
January 7, 2020
專案思維工程思維

用 Chatbot 打造超有趣線上 RPG :把同事變成 NPC !

完整架完95個模組,尿都變紅色的。 哈囉大家~新年快樂🎉🎉 在被期末考荼毒的同時我又來寫寫工具文了! 每次寫文章都會先列出架構,但還是會花費我蠻多時間,大約1至1.5小時,眼看期末要讀不完了我還在這裡寫案例 ㄏㄏ。 這次主題是《用 Chatbot 打造超有趣線上 RPG :把同事變成 NPC !》 最初分享《老闆惹怒工程師可以激起多大的社群效應:Chatbot 新手基礎操作案例》時,雖然自己分享了失敗的案例,但是出於分享的心情還是感到很興奮。 後來又發佈了《【教學】老闆惹怒工程師可以激起多大的社群效應: Chatbot 新手基礎操作案例》,因為我發現前一篇在操作面實在描述太少,原本是抱著「如果有新手想操作類似案例,操作面可以去看 BotBonnie 的教學」的心情,但是如果這樣依步驟拆解,讓人看案例的同時或是閱讀後可以上手,好像也是深層分享的一種方式。 教學版本的老闆惹怒工程師我還沒有上傳到Medium跟Blink,過幾天考完試再發佈。 By the way,BotBonnie什麼時候要找我當代言 🤣 那我們開始來聊聊這次的案例吧!…
學程式助教
January 6, 2020
Python工程思維

Python財金應用:Black-Scholes選擇權訂價模型(1)

經典的量化金融案例,也是每天在交易室會碰到無數次的內容,推導Black-Scholes formula就不是本篇的重點,有興趣我會在文章最底下附上推薦書單。 選擇權(Options)就是在未來某個時點可用某個價格買進或賣出標的資產的權利,投資人可以買進當作避險或樂透賭博,選擇權槓桿倍數相當大,如果將Gamma效果考慮進去,槓桿可以至百倍,而行情看錯則頂多失去權利金而已,Black-Scholes就是利用未來標的資產進入價內的機率去計算出選擇權權利金的。 有了這個評價公式後,我們可以衡量在設定波動度下的選擇權理論價值,也可以利用市場報價來反推選擇權的波動率,一般稱為隱含波動率(Implied Volatility)。 上圖就是選擇權的報價畫面,可以看到某個日期到期的選擇權鏈(Options Chain)的各履約價報價,並從中反推各種參數。 用Python撰寫Black-Scholes評價公式其實很輕鬆,按照公式的寫法轉換為套件的函數而已,同步還可學會函數的應用。 以上就是一個簡單的選擇權評價範例,給定五個參數數值後,就直接開始計算d1與d2,大家可以對照一下公式,就會發現其實很簡單,下面將每個區塊拆解並解釋。 1. 引入套件(numpy, scipy) 由於Black-Scholes需要用到指數(Exponential)與常態累積分配(Normal distribution c.d.f.)的科學運算 現有預設的Python是沒有這類函數的,則需要引用大量擁有科學運算函數的numpy與scipy。 2. 給定Black-Scholes參數 先行預設標的資產價格(S)、履約價格(K)、無風險利率(r)、具到期日(t)與波動率(Sigma),在整數位後幾乎都有加上小數點,就是為了將變數設定為浮點位,以確保運算正確。 (Python不用另行宣告變數型態) 3. 計算d1與d2 有利用的函數為numpy的log與sqrt,詳細可對照封面照的公式,要小心括號的擺放。 4. 計算Call的理論價格…
學程式助教
January 5, 2020
Python

3個必須瞭解的Python屬性觀念

本篇接續淺談Python類別(Class)文章,細談Python類別(Class)中的屬性(Attribute)觀念。我們知道屬性(Attribute)可以分為實體屬性(Instance Attribute)與類別屬性(Class Attribute),今天就來探討它們的用法以及不一樣的地方。另外,也會介紹Python屬性(Property)的應用方式。 實體屬性(Instance Attribute) 類別屬性(Class Attribute) 屬性(Property) 一、實體屬性(Instance Attribute) 需伴隨物件(Object)的生成來建立,也就是透過點(.)的語法或在建構式(Constructor)中所生成的屬性(Attribute)。各物件(Object)的實體屬性(Instance Attribute)各自獨立,修改某一個物件(Object)的實體屬性(Instance Attribute)值時,不會影響到其他物件。如下範例: 執行結果 從範例中可以看到,我們透過點(.)的方式來建立物件(Object)的屬性(Attribute),mazda和toyota物件的color與seat為實體屬性(Instance Attribute),互相獨立且有各自的屬性值。接下來我們來看透過建構式(Constructor)所建立的屬性(Attribute): 執行結果 在第12行~第14行我們修改了mazda物件(Object)的color、seat及weight屬性(Attribute)值,並不會影響到其他物件toyota的屬性值,所以我們可以說color、seat和weight為實體屬性(Instance Attribute)。 二、類別屬性(Class Attribute) 定義在類別層級的屬性(Attribute),也就是在建構式(Constructor)之外的屬性(Attribute)。可以不需要建立物件(Object),直接透過類別名稱存取。各物件共享類別屬性(Class Attribute)值,也就是說當我們修改類別屬性(Class Attribute)值時,每一個透過此類別(Class)所建立的物件(Object),都會受到影響。如下範例: 執行結果…
學程式助教
January 4, 2020
Python

淺談Python類別(Class)

在學習程式語言時,或多或少都有聽過物件導向程式設計(Object-oriented programming,簡稱OOP),它是一個具有物件(Object)概念的開發方式,能夠提高軟體的重用性、擴充性及維護性,在開發大型的應用程式時更是被廣為使用,所以在現今多數的程式語言都有此種開發方式,Python當然也不例外。而要使用物件導向程式設計就必須對類別(Class)及物件(Object)等有一些基本的了解,包含了: 類別(Class) 物件(Object) 屬性(Attribute) 建構式(Constructor) 方法(Method) 我們先來看一下今天要來建立的類別: 接下來就針對類別(Class)各個部分來進行介紹。 一、類別(Class) 簡單來說,就是物件(Object)的藍圖(blueprint)。就像要生產一部汽車時,都會有設計圖,藉此可以知道此類汽車會有哪些特性及功能,類別(Class)就類似設計圖,會定義未來產生物件(Object)時所擁有的屬性(Attribute)及方法(Method)。而定義類別的語法如下: 首先會有class關鍵字,接著自定類別名稱,最後加上冒號。類別名稱的命名原則習慣上使用Pascal命名法,也就是每個單字字首大寫,不得使用空白或底線分隔單字,如下範例: 二、物件(Object) 就是透過類別(Class)實際建立的實體,就像實際生產出來的汽車(例如:Mazda)。類別(Class)與物件(Object)的關係就像汽車設計圖與汽車實體。而建立物件(Object)的語法如下: 範例:   範例中的mazda即是Cars類別(Class)的物件(Object)。Python也提供了一個函式isinstance()來判斷類別(Class)與物件(Object)的關係,語法如下: 範例: 第15行由於mazda並不是Motorcycle的物件(Object),所以執行結果為False。 三、屬性(Attribute) 負責存放物件(Object)的資料。設定物件(Object)的屬性值語法如下: 範例: 從範例中可以看到,建立物件(Object)後,才可進行屬性值(Attribute)的設定。但是這種寫法當有很多屬性需進行設定時,會顯得沒有效率,所以會建議使用建構式(Constructor)來進行屬性值(Attribute)的設定,於文章第四節會來跟大家說明。而存取物件的屬性值則透過以下語法: 範例: 四、建構式(Constructor)…
學程式助教
January 2, 2020