fbpx
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) (more…)
學程式助教
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
AlgorithmJavascript工程思維

JS 學資料結構與演算法 (排序篇)— 快速排序法 Quick Sort

大家好我是老莫,也可以叫我 Kyle為什麼要寫這個主題?之前在尋找實習職缺的過程中,遇到幾次當面或者電話面試考資料結構與演算法等技術題,測驗結束才發現自己沒有透徹了解這些概念,有些概念懂了卻不知道怎麼用程式語言實作出來,想當然面試結果並不理想。因此我決定設定這樣的主題,並以自己最擅長的語言 JavaScript 將資料結構或演算法實作出來,除了能夠了解背後的概念外,也有能力可以透過程式語言實作出來,並利用這些概念去解決真實狀況遇到的技術問題。主題涵蓋的範圍?這次 “JS 學資料結構與演算法” 系列預計會包含以下範圍:排序 (sort)搜尋 (sesrch)動態程式規劃 (dynamic programming)Hash Table 雜湊表Linked List 鏈結串列Stack 堆疊Queue 佇列Tree 樹Graph 圖形Recursion 遞迴其中各類別可能又會往下細分子類別依次介紹(如排序下細分各種排序法),我想這會是一個漫長的主題,但相信踏實地走完這趟旅程一定會讓基礎更加扎實,也能幫助像我一樣對這些觀念一知半解的讀者能有更透徹的理解,如果對這個主題有興趣的朋友們記得追蹤我囉!*此後內容皆假設讀者了解基本演算法定義與時間複雜度概念快速排序法演算法定義:快速排序法採用 Devide and Conquer 的概念,將一個大問題拆分成數個較小的子問題,再將子問題的結果整合成原問題的答案。作法:選定一個基準值 (Pivot)將比基準值…
學程式助教
January 4, 2020
Python

淺談Python類別(Class)

在學習程式語言時,或多或少都有聽過物件導向程式設計(Object-oriented programming,簡稱OOP),它是一個具有物件(Object)概念的開發方式,能夠提高軟體的重用性、擴充性及維護性,在開發大型的應用程式時更是被廣為使用,所以在現今多數的程式語言都有此種開發方式,Python當然也不例外。 而要使用物件導向程式設計就必須對類別(Class)及物件(Object)等有一些基本的了解,包含了: 類別(Class) 物件(Object) 屬性(Attribute) 建構式(Constructor) 方法(Method) (more…)
學程式助教
January 2, 2020
工程思維

現在有「文言文程式語言」,你還用Python嗎?

你知道打程式會用到什麼語言嗎?沒錯,是英文,因此不管你是用 Python、Ruby、Javascript,你都至少要看得懂return、if等等,但是,有位中國工程師 LingDong Huang 在 Github 上發表了一款自己開發的「文言文程式語言」,把for 迴圈、變數定義,全部修改成文言文!你發現了嗎?寫程式最一開始的定義環境在這裡變成了吾有一術。名之曰「快排」。欲行是術。必先得一列。曰「甲」。乃行是術日。之後工程師先將這個程式定義為「列」,同時也定義行列的名稱及變數。吾有三列。名之曰「首」。曰「頷」。曰「尾」。再來是 for迴圈、if、else。其中「凡」代表 for,「若」代表 if,「若非」代表 else if。變成下方這樣凡「甲餘」中之「丁」。若「丁」小於「甲一」者。充「首」以「丁」。若非。充「尾」以「丁」也。云云看到這裡你應該也找到了一個蠻可愛的變動 XD,平常使用英文打程式,我們會用大小括號來代表迴圈的運算範圍,但是在這款文言文程式語言中,用了「也」、「云云」去代替,超級有趣!只有這些基本的還不夠,通常你會想在程式上作註解,讓其他工程師也能夠順利完成編輯或是溝通,而在這個文言文程式語言也做得到!批曰。「「曼德博集。亦稱曼德布洛特複數集合。複平面上组成分形之點之集合也。」」在英文裡我們會使用斜線,在這裡,斜線則被批曰取代,感覺就像詩人看完另一位詩人的作品後留下了評論!文言文程式語言在一周前被 Barret 李靖 發佈到推特上,隨即引起網友熱烈討論,有網友表示:「要打出這個,必須要文理雙全才行呀!」,同時也有不少網友留言表示這樣的程式語言,肯定會讓肯定會讓國文不好的工程師頭痛,甚至有出現想讓孩子學會的相關留言,如果古文程式語言真的盛行,未來要當個工程師,可能還得常常翻閱古文 XD人們在說的語言常被當作溝通的最大管道,每個語言之間都存在著邏輯可被推理,其實程式語言也是!雖然複雜程度與表現都有所差異,但是都有跡可循,因此如果你已經成功精通了一個程式語言,不妨往下一個程式語言邁進!不過如果你想精通「文言文程式語言」,真的還是再好好考慮一下吧!
學程式助教
December 25, 2019
Blockchain

加速建造開發環境,用 Docker 建立 Bitcoin 私鏈

開發時同步全節點太慢了,用 Docker 建立私有鏈更省時間。 一般在開發比特幣相關業務的情況下,會需要能夠跟 RPC server 溝通的需求,如果我們跑主鏈或是 testnet,同步全節點都要花上不少時間,在節點還沒同步完全以前,可能沒辦法準確的知道比方說 address 裡面的餘額之類。 但如果自己在本地掛個私有鏈起來,先搞定 RPC 之間的溝通或監聽,會是更有效率的作法。 Step 1: 安裝 Docker 載點:https://www.docker.com/products/docker-toolbox Docker 只要安裝過之後,就可以在本地跑起 linux 的虛擬機。 # 檢查是否成功安裝 docker…
學程式助教
December 23, 2019