untitled



Similar documents
6-1-1極限的概念

Microsoft PowerPoint - 資料庫正規化(ccchen).ppt

Microsoft Word - 第四章.doc

Microsoft Word doc

<4D F736F F D20B3E6A4B830312D2D2DBCC6BD75BB50BEE3BCC6AABAA55BB4EEB942BAE22E646F6378>

CONTENTS 訓 練 內 容 設 計 法 056 淡 季 期 的 訓 練 058 旺 季 期 的 訓 練 060 針 對 爬 坡 賽 的 訓 練 內 容 062 賽 後 的 資 料 分 析 PART4/ 鏑 木 毅 先 生 的 建 言 活 用 於 越 野 路 跑 的 心 跳 訓

證 券 簡 易 下 單 :2121 證 券 簡 易 下 單 1. 主 工 具 列 的 視 窗 搜 尋 器 直 接 輸 入 點 擊 主 選 單 證 券 專 區 下 單 特 殊 下 單 2121 證 券 簡 易 下 單 畫 面 說 明 1. 下 單 區 2. 個 股 行 情 資 訊 與

第 6. 節 不 定 積 分 的 基 本 公 式 我 們 可 以 把 已 經 知 道 反 導 函 數 之 所 有 函 數 都 視 為 不 定 積 分 的 基 本 公 式 基 本 公 式 涵 蓋 的 範 圍 愈 大, 我 們 求 解 積 分 就 愈 容 易, 但 有 記 憶 不 易 的 情 事 研 讀

五 四 五 說 ( 代 序 ) 李 澤 厚 劉 再 復 I I II IV V VII 第 一 篇 五 四 新 文 化 運 動 批 評 提 綱 附 論 一 中 國 貴 族 精 神 的 命 運 ( 提 綱 )

(Microsoft Word - MOODLE990201\266i\266\245\244\342\245U )

所 3 學 分 課 程, 及 兩 門 跨 領 域 課 程 共 6 學 分 以 上 課 程 學 生 在 修 課 前, 必 須 填 寫 課 程 修 課 認 定 表, 經 班 主 任 或 指 導 教 授 簽 名 後 始 認 定 此 課 程 學 分 ) 10. 本 規 章 未 盡 事 宜, 悉 依 學 位

目 錄 項 目 內 容 頁 數 1 手 機 要 求 3 2 登 記 程 序 3 3 登 入 程 序 4 4 輸 入 買 賣 指 示 6 5 更 改 指 示 14 6 取 消 指 示 18 7 查 詢 股 票 結 存 21 8 查 詢 買 賣 指 示 23 9 更 改 密 碼 查 詢 股

Microsoft Word - Draft circular on Sub Leg Apr (chi)_Traditional

3. 給 定 一 整 數 陣 列 a[0] a[1] a[99] 且 a[k]=3k+1, 以 value=100 呼 叫 以 下 兩 函 式, 假 設 函 式 f1 及 f2 之 while 迴 圈 主 體 分 別 執 行 n1 與 n2 次 (i.e, 計 算 if 敘 述 執 行 次 數, 不

寫 作 背 景 導 讀 [98] L Lyman Frank Baum

NCKU elearning Manual

奇 妙 的 24 摘 要 從 撲 克 牌 中 隨 機 抽 取 4 張 牌 可 以 有 1820 種 牌 組, 在 這 1820 種 牌 組 中, 有 1362 組 可 經 由 四 則 運 算 的 方 式, 算 出 24 點, 有 458 組 無 解 快 速 求 解 的 方 法 有 相 加 法 因 數

128 提 示 樞 紐 分 析 表 的 用 途 樞 紐 分 析 表 是 指 可 以 用 來 快 速 合 併 和 比 較 大 量 資 料 的 互 動 式 表 格, 透 過 它 可 以 詳 細 分 析 數 值 資 料, 特 別 適 用 於 下 列 情 況 : 需 要 從 含 有 大 量 資 料 的 清

章節

life930106

肆 研 究 方 法 進 行 本 研 究 前, 我 們 首 先 對 研 究 中 所 用 到 名 詞 作 定 義 定 義 : 牌 數 : 玩 牌 時 所 使 用 到 撲 克 牌 數 次 數 : 進 行 猜 心 術 遊 戲 時, 重 複 分 牌 次 數 數 : 進 行 猜 心 術 遊 戲 時, 每 次 分

目 錄 頁 1. 歡 迎 使 用 網 上 預 約 面 談 訪 問 系 統 新 用 戶 新 用 戶 登 入 帳 戶 程 序 啟 動 網 上 預 約 面 談 訪 問 帳 戶 核 對 帳 戶 的 地 址 資 料

e-Submission System Quick Reference Guide for Publication Related Matters (Chinese version)


研究一:n人以『剪刀、石頭、布』猜拳法猜拳一次,決定一人勝

目 錄 一 系 統 登 入... 2 ( 一 ) 系 統 登 入 畫 面... 2 ( 二 ) 首 次 登 入 請 先 註 冊... 3 ( 三 ) 忘 記 單 位 帳 號... 8 ( 四 ) 忘 記 密 碼 ( 五 ) 健 保 卡 更 換 ( 六 ) 重 寄 確 認 信.

09

C CH4.tpf

Microsoft PowerPoint - F263-CH10.ppt [相容模式]


Microsoft Word - ch07

PowerPoint 簡報

實德證券網上交易系統示範

目 錄 壹 題 目 1: 新 增 商 品 ( 商 品 名 稱 為 玉 井 芒 果 乾 禮 盒 )... 3 貳 題 目 2: 新 增 商 品 ( 商 品 名 稱 為 紅 磚 布 丁 精 選 禮 盒 )... 5 參 題 目 3: 新 增 商 品 ( 商 品 名 稱 為 晶 鑽 XO 醬 禮 盒 ).

內 政 統 計 通 報

授 課 老 師 章 節 第 一 章 教 學 教 具 間 3 分 鐘 粉 筆 CNC 銑 床 教 學 內 容 CNC 銑 床 之 基 本 操 作 教 材 來 源 數 值 控 制 機 械 實 習 Ⅰ 1. 了 解 CNC 銑 床 的 發 展 2. 了 解 CNC 銑 床 刀 具 的 選 用 3. 了 解

268 別 行 政 區 所 以, 全 國 人 民 代 表 大 會 根 據 憲 法 第 31 條 規 定 設 立 了 特 別 行 政 區 沒 有 憲 法 第 31 條 的 規 定, 就 沒 有 特 別 行 政 區 制 度 存 在 的 合 法 性 基 礎 62 正 如 上 述, 憲 法 為 特 別 行

Microsoft PowerPoint - chap5

BSP 烤箱 - 封面-2

瑞興銀行

sle cover 1


四 修 正 幼 兒 園 師 資 類 科 應 修 學 分 數 為 四 十 八 學 分, 並 明 定 學 分 數 抵 免 之 相 關 規 定 及 規 範 修 習 幼 兒 園 教 育 專 業 課 程 之 最 低 年 限 ( 修 正 條 文 第 五 條 ) 五 發 給 修 畢 師 資 職 前 教 育 證 明

骨 折 別 日 數 表 1. 鼻 骨 眶 骨 ( 含 顴 骨 ) 14 天 11. 骨 盤 ( 包 括 腸 骨 恥 骨 坐 骨 薦 骨 ) 40 天 2. 掌 骨 指 骨 14 天 12. 臂 骨 40 天 3. 蹠 骨 趾 骨 14 天 13. 橈 骨 與 尺 骨 40 天 4. 下 顎 ( 齒

前 項 第 三 款 所 定 有 機 農 產 品 及 有 機 農 產 加 工 品 驗 證 基 準, 如 附 件 一 第 七 條 驗 證 機 構 受 理 有 機 農 產 品 及 有 機 農 產 加 工 品 之 驗 證, 應 辦 理 書 面 審 查 實 地 查 驗 產 品 檢 驗 及 驗 證 決 定 之

101年度社會福利方案 網路線上操作手冊

二零零六至零七年施政報告

(Microsoft Word \245\277\244\361\273P\244\317\244\361.doc)

國中數學基本學習內容補救教材 第二冊

<4D F736F F D20B2C433B3B92020B971B8F4A4C0AA52A7DEA5A9>

答客問


投影片 1

Microsoft Word - 小論文-變性狗問卷調查.doc

關 於 教 育 部 學 習 拍 立 得 教 育 部 於 (103) 年 度 整 合 各 縣 市 政 府 部 屬 機 構 大 學 及 民 間 的 數 位 資 源 與 服 務, 依 不 同 類 型, 分 別 匯 集 於 教 育 大 市 集 教 育 百 科 教 育 媒 體 影 音 教 育 部 學 習 拍

「技術員訓練計劃」小冊子 "Technician Training Scheme" pamphlet

課 程 簡 介 第 一 章 基 本 電 路 理 論 第 二 章 半 導 體 物 理 與 pn 接 面 二 極 體 元 件 分 析 第 三 章 二 極 體 電 路 分 析

會 員 專 區 使 用 手 冊 目 錄 一 基 本 介 紹 會 員 專 區 登 入 位 置 主 畫 面 與 網 站 架 構 : 功 能 導 覽 列 說 明 :... 3 二 DOI 查 詢 與 維 護... 4 三 DOI 註 冊 期 刊 類 型...

十 三. 服 務 學 習 十 四. 座 位 表 管 理 十 五. 班 導 師 通 訊 錄 小 工 具 十 六. 電 子 報 表 十 七. 評 量 成 績 十 八. 學 期 成 績 ( 國 中 ) 十 九. 學 期 成 績 ( 高

目 錄

1. 安 裝 1.1 手 機 端 安 裝 檔 (cab 檔 ) 請 您 將 下 載 的 cab 檔 案 複 製 到 手 機 內 任 一 資 料 夾, 在 手 機 上 點 擊 cab 檔 案 後 即 可 開 始 安 裝 點 擊 本 檔 案 即 可 開 始 安 裝 請 於 您 的 手 機 上 繼 續 安

支 持 機 構 : 社 會 文 化 司 主 辦 機 構 : 澳 門 學 聯 澳 門 青 年 研 究 協 會 電 話 : 傳 真 : 網 址 : 報 告 主 筆 : 李 略 博 士 數 據 錄

<4D F736F F D D313032A7DEC075BAC2BC66B56EB04FB44EC5AAA7D3C440A7C7A874B2CEBEDEA740A4E2A5552E646F63>

<4D F736F F D20A4BDA640BADEB27ABD64C3A5A44AC2BEB4B6B371B67DA6D25FB3F8A6D2B0DDC344B6B05F F636E>

《數學奠基活動模組示例》

第一章 緒論

簽 呈

Microsoft Word - 雲林區_免試平台_國中模擬選填_操作手冊.doc

的 課 程 計 畫 多 數 是 書 商 而 不 是 老 師 規 畫 的, 老 師 只 做 上 傳 的 動 作, 所 以 沒 人 會 去 看 這 份 計 畫! 但 是 我 發 現 日 本 的 教 學 指 導 ( 含 計 畫 與 教 案 ) 也 是 現 成 的 是 理 科 研 究 會 ( 民 間 的 理

二 兒 歌 選 用 情 形 ( ) 2 ( ) ( )

教育實習問與答:

2016年中國語文科試卷三聆聽及綜合能力考核樣本試卷示例及說明

(Microsoft Word -

校 長 遴 選 者 就 相 關 遴 選 事 項, 有 程 序 外 之 接 觸 遴 選 會 委 員 在 任 期 間 因 故 無 法 執 行 任 務 或 有 不 適 當 之 行 為 者, 由 各 該 主 管 機 關 解 聘 之 ; 其 缺 額, 依 第 一 項 至 第 五 項 規 定 聘 ( 派 ) 委

時間問題

如何正確使用自己所擁有的正版音樂光碟?

(Microsoft Word - IAS26_0106_\270\352\270\333__\272\364\255\266.doc)

Microsoft Word - 立法會十四題附件.doc

Microsoft Word - 全華Ch2-05.doc

Microsoft PowerPoint - 104年說明會簡報-final-0923.ppt [相容模式]

10. 遊 戲 動 作 結 附 ( 附 加 牌 ) 支 付 魔 力 移 除 展 示 召 喚 造 成 傷 害 連 鎖 抽 牌

16

Microsoft Word - SIM

格 成 績 證 明 第 六 條 第 七 條 本 系 大 四 課 程 中 規 劃 日 本 韓 國 越 南 專 題 研 究, 學 生 需 於 大 四 時 修 習 該 課 程, 並 於 規 定 期 間 內 提 出 專 題 報 告, 取 得 合 格 成 績 證 明 本 系 規 定 學 生 畢 業 時 需 取

(3) 澳 門 特 別 行 政 區 之 稅 務 知 識 及 (4) 商 法 典 ( 二 ) 重 新 批 准 註 冊 為 註 冊 會 計 師 / 專 業 會 計 員 之 筆 試 科 目 如 下 : (1) 澳 門 特 別 行 政 區 之 稅 務 知 識 及 (2) 商 法 典 ( 三 ) 考 試 範

(Microsoft Word - \244\361\301\311\263W\253h\244\316\255p\244\300\257\ \(1\))

進 入 系 統 1. 請 於 首 頁 右 側 使 用 者 登 入 輸 入 帳 號 密 碼 驗 證 碼 後, 點 選 登 入 進 入 系 統 2. 直 接 點 選 右 側 的 進 入 系 統, 直 接 進 入 題 目 檢 索 頁 面 直 接 進 入 系 統 後, 您 仍 可 瀏 覽 選 擇 您 所 需

桃園市104年國民中學新進教師甄選各校複試方式及需求表

行政院金融監督管理委員會全球資訊網-行政院金融監督管理委員會

Microsoft PowerPoint - 102教師升等說明會

Microsoft Word - Chap06.doc

第二組掃描器規範書

(Microsoft Word - \246\250\301Z\272\336\262z.doc)

Layout 1

作 品 名 稱 : 永 遠 都 是 一 條 龍 摘 要 本 文 的 研 究 是 根 據 特 定 規 則 下, 如 何 將 撲 克 牌 翻 出 一 條 龍? 的 問 題, 進 行 不 同 方 法 的 研 究, 以 不 同 解 題 方 式 觀 察 問 題 解 決 問 題 壹 研 究 動 機 每 隔 一

連江縣政府所屬學校兼任代課及代理教師聘任實施要點(草案)

預測練習題.doc

本 題 各 點 彼 此 均 有 相 互 關 聯, 作 答 不 完 整, 將 影 響 各 評 分 點 之 得 分, 請 注 意 檔 名 儲 存 錯 誤, 該 題 一 律 0 分 計 算 深 淺 圖 表.xlsx 請 依 下 方 題 目 敘 述 操 作 ( 佔 總 分 :) 儲 存 格 範

C 標準文件

修 課 特 殊 規 定 : 一 法 律 系 學 生 最 低 畢 業 學 分 128;101 學 年 度 修 讀 法 律 系 雙 主 修 學 生 應 修 畢 法 律 專 業 目 64 學 分 ( 限 修 習 本 校 法 律 系 開 設 課 程, 不 得 以 原 學 系 或 外 校 課 程 抵 免 -

Transcription:

Chapter 06 使 用 類 別

Python 的 類 別 機 制 是 C++ 以 及 Modula-3 的 綜 合 體, 當 我 們 在 使 用 Python 的 類 別 時 並 不 用 去 宣 告 該 類 別 的 型 態, 也 不 用 去 宣 告 這 個 類 別 是 否 為 public 或 private,python 所 有 的 類 別 與 其 包 含 的 成 員 都 是 public 的, 對 於 類 別 (Class) 來 說 最 重 要 的 一 些 特 性 在 Python 程 式 語 言 裡 面 都 有 完 全 的 保 留, 如 最 重 要 的 單 一 繼 承 與 多 重 繼 承, 一 個 衍 生 / 子 類 別 (Derived class) 可 以 覆 載 (Override) 其 所 有 基 礎 類 別 (base class) 的 任 何 方 法 (method), 方 法 (method) 也 可 以 呼 叫 一 個 基 礎 類 別 (base class) 的 同 名 方 法 Python 的 類 別 裡, 所 有 的 函 式 成 員 (member functions) 都 是 virtual 的, 這 裡 也 沒 有 所 謂 的 建 構 函 數 (Constructors) 或 是 解 構 函 數 (Destructors) 的 存 在 Python 的 類 別 宣 告 建 立 一 個 實 例 (Instance) 及 繼 承 都 是 很 快 速 及 簡 單, 在 您 閱 讀 完 本 章 節 後 您 將 學 會 底 下 知 識 : 建 立 一 個 類 別 進 階 的 物 件 導 向 技 巧 使 用 了 解 類 別 變 數 與 實 例 變 數 的 差 異 如 何 動 態 的 新 增 與 刪 除 類 別 實 例 的 方 法 成 員 如 何 動 態 的 新 增 與 刪 除 類 別 實 例 的 屬 性 Python 的 字 串 也 是 物 件 當 我 們 建 立 一 個 字 串 變 數, 其 實 它 就 是 字 串 物 件, 從 dir() 函 數 可 以 看 到 它 繼 承 了 許 多 物 件 的 特 性,dir() 函 數 列 出 我 們 定 義 的 simple 字 串 物 件 可 以 使 用 的 方 法 (method) 成 員 >>> simple = "an object" >>> dir(simple) [' add ', ' class ', ' contains ', ' delattr ', ' doc ', ' eq ', ' ge ', ' getattribute ', ' getitem ', ' getnewargs ', ' getslice ', ' gt ', ' hash ', ' init ', ' le ', ' len ', ' lt ', ' mod ', ' mul ', ' ne ', ' new ', ' reduce ', ' reduce_ex ', ' repr ', 6-2

' rmod ', ' rmul ', ' setattr ', ' str ', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill'] 6.1 定 義 類 別 在 Python 程 式 語 言 裡 要 定 義 一 個 類 別 必 須 使 用 class 敘 述 句, 然 後 在 敘 述 句 後 面 接 著 類 別 的 名 稱, 並 不 用 去 定 義 是 否 為 public 或 private 等, 也 不 用 去 定 義 資 料 型 態, 如 下 定 義 : class 敘 述 句 用 法 : class ClassName: <statements> <next statements> 使 用 類 別 如 底 下 範 例 我 們 宣 告 一 個 簡 單 的 物 件, 名 稱 為 myfirstobj, 在 物 件 裡 面 跟 函 數 一 樣 都 可 以 使 用 備 註 說 明, 我 們 可 以 使 用 doc 屬 性 (attribute) 來 呼 叫 該 物 件 的 備 註 說 明, 如 果 我 們 直 接 呼 叫 物 件 的 名 稱 將 會 得 到 該 物 件 的 名 稱 與 識 別 碼, 如 <class main.myfirstobj at 0x01FF7E10> >>> class myfirstobj: 建 立 一 個 簡 單 的 物 件 在 這 裡 的 是 物 件 的 備 註 說 明, 跟 函 數 一 樣 >>> myfirstobj <class main.myfirstobj at 0x01FF7E10> 6-3

>>> print(myfirstobj. doc ) 建 立 一 個 簡 單 的 物 件 在 這 裡 的 是 物 件 的 備 註 說 明, 跟 函 數 一 樣 6.1.1 使 用 類 別 定 義 好 類 別 後 我 們 必 須 建 立 一 個 物 件 的 實 例 (Instance) 才 能 使 用 物 件, 如 下 範 例 建 立 一 個 物 件 的 實 例, 名 稱 為 o, 我 們 可 以 直 接 呼 叫 o 或 是 利 用 type() 函 數 來 知 道 它 是 物 件 的 實 例 >>> o = myfirstobj() >>> o < main.myfirstobj instance at 0x01FF8F58> >>> type(o) <type 'instance'> Python 3.0 差 異 在 於 instance 變 成 object >>> o < main.myfirstobj object at 0x01019B90> >>> type(o) <class ' main.myfirstobj'> 我 們 可 以 透 過 dir() 函 數 來 了 解 目 前 在 物 件 內 的 方 法 (method) 成 員 >>> dir(o) [' doc ', ' module '] 接 著 我 們 可 以 嘗 試 宣 告 o.mylist = [], 表 示 定 義 一 個 mylist 成 員, 然 後 [] 符 號 代 表 這 個 mylist 成 員 是 序 列 型 態, 定 義 完 後 再 嘗 試 使 用 dir() 函 數 可 以 發 現 mylist 名 稱 被 加 入 清 單 中 >>> o.mylist = [] >>> dir(o) [' doc ', ' module ', 'mylist'] 6-4

接 著 我 們 來 看 剛 才 所 宣 告 的 mylist 有 什 麼 作 用, 如 Figure 6-1 畫 面, 沒 錯 剛 才 的 mylist 繼 承 了 序 列 物 件 的 所 有 (method) 方 法 成 員 Figure 6-1 mylist 成 員 可 以 使 用 的 方 法 (method) 成 員 接 著 我 們 可 以 嘗 試 使 用 mylist 裡 面 的 方 法, 底 下 範 例 是 使 用 extend() 函 數 : >>> o.mylist.extend(["a", "b", "c"]) >>> o.mylist ['a', 'b', 'c'] 使 用 類 別 6.1.2 定 義 類 別 內 的 方 法 (method) 類 別 內 的 方 法 (method) 宣 告 方 式 跟 函 數 一 樣, 您 可 以 想 像 類 別 方 法 就 像 是 將 函 數 放 進 類 別 裡 面, 差 異 性 在 於 函 數 的 引 數 部 份 必 須 要 加 入 self 敘 述 句,self 敘 述 句 就 像 其 他 程 式 語 言 裡 面 的 this 底 下 範 例 定 義 了 一 個 方 法 成 員, 名 稱 為 func, 在 func 雖 然 定 義 了 self 與 name 引 數, 但 是 下 面 在 呼 叫 該 方 法 只 需 要 傳 值 給 name 引 數 就 可 以,self 引 數 是 不 用 理 會 的, 我 們 也 無 法 傳 值 給 它, 但 是 在 定 義 類 別 方 法 成 員 時 是 一 定 要 使 用 的 程 式 碼 :ch601.py #!/usr/bin/env python #coding=utf-8 6-5

# 定 義 myfirstobj 類 別 class myfirstobj: 建 立 一 個 簡 單 的 物 件 在 這 裡 的 是 物 件 的 備 註 說 明, 跟 函 數 一 樣 count = 100 def func(self, name): return "Hello", name # 建 立 instance o = myfirstobj() # 呼 叫 類 別 內 的 attribute print(o.count) # 呼 叫 類 別 內 的 method print(o.func("s")) # 使 用 type 查 看 o.func 的 型 態 print(type(o.func)) 程 式 輸 出 結 果 為 : 100 ('Hello', 's') <type 'method'> 如 果 在 定 義 func 函 數 時 沒 有 給 予 self 敘 述 句 則 會 發 生 TypeError 錯 誤 訊 息, 如 下 : Traceback (most recent call last): File "D: \code\ch601.py", line 20, in <module> print o.func() TypeError: func() takes no arguments (1 given) 6-6

6.1.3 定 義 類 別 內 的 init () 方 法 Python 程 式 語 言 裡 的 類 別 有 一 個 特 別 方 法 (method) 稱 為 init (), 當 建 立 一 個 實 例 (Instance) 的 同 時 類 別 就 會 去 執 行 這 個 函 數, 其 實 這 個 就 像 其 他 程 式 語 言 的 類 別 所 定 義 的 建 構 函 數 (Constructors), 在 範 例 ch602 裡 當 宣 告 n = operator(2) 後 就 會 進 入 operator 類 別 裡 的 init () 方 法, 如 下 : def init (self, x=none): self.x = x self.total = 100 print("run init ()") 另 外 在 這 類 別 裡 有 一 個 實 例 的 全 域 變 數 為 self.total = 100, 當 執 行 plus() 方 法 與 reducr() 方 法 時 就 會 針 對 這 個 全 域 變 數 進 行 遞 增 與 遞 減 程 式 碼 :ch602.py #!/usr/bin/env python #coding=utf-8 使 用 類 別 # 定 義 operator 類 別 class operator: # 這 個 特 殊 的 init () 函 數 會 在 建 立 實 例 Instance 時 就 會 執 行 def init (self, x=none): # 在 這 裡 所 宣 告 的 attributes 前 面 如 果 加 上 self 就 表 示 全 域 變 數 self.x = x self.total = 100 print("run init ()") # 這 個 函 數 會 將 self.total 變 數 遞 增 def plus(self): self.total += self.x return self.total # 這 個 函 數 會 將 self.total 變 數 遞 增 6-7

def reduce(self): self.total -= self.x return self.total # 建 立 Instance, 傳 入 2 表 示 一 次 遞 增 2 或 遞 減 2 n = operator(2) print("run plus method", n.plus()) print("run reduce method", n.reduce()) print("run reduce method", n.reduce()) 程 式 輸 出 結 果 為 : run init () run plus method 102 run reduce method 100 run reduce method 98 6.1.4 定 義 類 別 內 的 屬 性 (attributes) 在 類 別 裡 面 有 所 謂 的 類 別 變 數 (class variable ) 與 實 例 變 數 (Instance variable), 通 常 定 義 在 init () 建 構 函 數 (Constructors) 裡 面 的 稱 為 實 例 變 數, 而 在 類 別 的 init () 建 構 函 數 與 方 法 成 員 之 外 的 變 數 稱 為 類 別 變 數, 實 例 變 數 (Instance variable) 除 了 必 須 使 用 self 敘 述 句 外 也 可 以 使 用 該 類 別 的 名 稱, 假 設 類 別 的 名 稱 為 cos, 然 後 變 數 名 稱 為 x, 那 麼 實 例 全 域 變 數 可 以 設 定 為 self.x 或 是 cos.x, 如 下 範 例 定 義 類 別 稱 為 operator, 所 以 實 例 全 域 變 數 名 稱 也 可 以 寫 成 operator.x 與 operator.total 程 式 碼 :ch603.py #!/usr/bin/env python #coding=utf-8 6-8

# 定 義 operator 類 別 class operator: def init (self, x=none): operator.x = x operator.total = 100 # 這 個 函 數 會 將 self.total 變 數 遞 增 def plus(self): operator.total += operator.x return "increase,", operator.total # 這 個 函 數 會 將 self.total 變 數 遞 增 def reduce(self): operator.total -= operator.x return "decrease, ", operator.total # 建 立 Instance, 傳 入 2 表 示 一 次 遞 增 2 或 遞 減 2 n = operator(2) print(n.plus()) print(n.reduce()) print(n.reduce()) print(n.reduce()) 使 用 類 別 程 式 輸 出 結 果 為 : ('increase,', 102) ('decrease, ', 100) ('decrease, ', 98) ('decrease, ', 96) 6-9

6.1.5 類 別 變 數 (class variable) 與 實 例 變 數 類 別 變 數 (class variable) 與 實 例 變 數 (Instance variable) 定 義 如 下 範 例, 在 範 例 結 果 中 我 們 可 以 清 楚 的 知 道 這 兩 種 變 數 之 間 的 差 異, 類 別 變 數 會 在 建 立 的 實 例 (Instance) 之 間 共 存 如 範 例 中 的 a 與 b, 而 實 例 變 數 並 不 會 共 存, 如 範 例 中 的 c 與 d 程 式 碼 :ch604.py #!/usr/bin/env python #coding=utf-8 class lists: # 類 別 變 數 class_variable = [] def init (self): # self.keywords 是 實 例 變 數 self.instance_variable = [] # 建 立 instance a 與 b a = lists() b = lists() # 給 類 別 變 數 值 a.class_variable.extend([1,2,3,4,5]) # 呼 叫 instance a 與 b print("call a", a.class_variable) print("call b", b.class_variable) # 建 立 instance c 與 d c = lists() d = lists() 6-10

# 給 實 例 變 數 值 c.instance_variable.extend(["a","b","c","d","e"]) # 呼 叫 instance c 與 d print("call c", c.instance_variable) print("call d", d.instance_variable) 程 式 輸 出 結 果 為 : call a [1, 2, 3, 4, 5] call b [1, 2, 3, 4, 5] call c ['a', 'b', 'c', 'd', 'e'] call d [] 6.2 動 態 新 增 類 別 實 例 方 法 成 員 當 我 們 在 建 立 一 個 類 別 物 件 時 都 必 須 先 定 義 好 該 類 別 的 屬 性 方 法 成 員 等, 但 是 您 有 沒 有 想 過, 當 我 們 定 義 完 的 物 件 如 果 在 執 行 期 間 (run-time) 能 不 能 也 能 動 態 的 加 入 新 的 方 法 成 員 或 是 屬 性 到 物 件 裡? 就 好 像 當 我 們 定 義 好 的 物 件 實 例 在 執 行 期 間 時 發 現 本 身 所 定 義 的 方 法 成 員 不 足 夠 時, 然 後 看 到 其 他 的 物 件 有 一 個 不 錯 的 方 法 成 員, 那 麼 我 們 是 不 是 可 以 讓 自 己 的 類 別 物 件 去 學 習 該 物 件 內 的 某 個 方 法 成 員 使 用 類 別 如 範 例 程 式 碼 ch605, 一 開 始 我 們 定 義 了 類 別 A, 然 後 也 定 義 一 個 方 法 成 員, 名 稱 為 sort, 在 執 行 期 間 遇 到 x 序 列, 我 們 想 要 對 這 個 序 列 排 序, 但 是 在 我 們 所 定 義 的 類 別 A 裡 面 的 sort() 方 法 函 數 裡 面 並 沒 有 定 義 任 何 程 式, 接 著 我 們 知 道 在 python 本 身 有 一 個 內 置 的 函 數 稱 為 sorted() 這 個 函 數 是 在 做 排 序 的, 所 以 我 們 決 定 學 習 它, 接 著 重 新 嘗 試 呼 叫 a.sort(), 我 們 發 現 原 本 的 sort 學 習 了 sorted() 的 功 能, 另 外, 我 們 發 現 所 定 義 的 類 別 A 並 沒 有 總 合 運 算 的 功 能, 但 是 我 們 知 道 在 Python 本 身 也 有 一 個 內 置 的 sum() 函 數, 雖 然 我 們 之 前 定 義 的 類 別 A 裡 面 沒 有 sum 這 個 名 稱, 可 以 學 習 嗎? 答 案 是 可 以 的 6-11

程 式 碼 :ch605.py #!/usr/bin/env python #coding=utf-8 # 定 義 一 個 類 別, 名 稱 為 A class A: # 定 義 一 個 方 法 成 員, 名 稱 為 sort def sort(self): pass # 建 立 一 個 實 例 (instance) a = A() # 呼 叫 方 法 成 員 a.sort() print(a.sort()) 在 執 行 期 間 遇 到 x 序 列, 我 們 想 要 對 這 個 序 列 排 序, 但 是 在 我 們 所 定 義 的 類 別 A 裡 面 的 sort() 方 法 函 數 裡 面 並 沒 有 定 義 任 何 程 式. x = [5,2,3,1,4] 接 著 我 們 知 道 在 python 本 身 有 一 個 內 置 的 函 數 稱 為 sorted() 這 個 函 數 是 在 做 排 序 的, 所 以 我 們 決 定 學 習 它. a.sort = sorted 接 著 重 新 嘗 試 呼 叫 a.sort(), 我 們 發 現 原 本 的 sort 學 習 了 sorted() 的 功 能 print(a.sort(x)) 6-12

另 外, 我 們 發 現 所 定 義 的 類 別 A 並 沒 有 總 合 運 算 的 功 能, 但 是 我 們 知 道 在 Python 本 身 也 有 一 個 內 置 的 sum() 函 數, 但 是 我 們 之 前 定 義 的 類 別 A 裡 面 沒 有 sum 這 個 名 稱, 可 以 學 習 嗎? 答 案 是 可 以 的. a.sum = sum 學 習 sum() 函 數 後 我 們 進 行 呼 叫 print(a.sum(x)) 程 式 輸 出 結 果 為 : None [1, 2, 3, 4, 5] 15 使 用 類 別 我 們 針 對 動 態 新 稱 方 法 來 做 更 詳 細 的 介 紹, 底 下 可 以 看 到 定 義 了 一 個 類 別 B, 然 後 這 個 類 別 B 本 身 並 沒 有 NewMethod 方 法 成 員, 後 來 我 們 透 過 new 模 組 內 的 instancemethod() 函 數 來 新 增 NewMethod 方 法 成 員 到 實 例 b 裡 面, 另 外 Python 3.0 已 經 移 除 new 模 組 >>> class B:... def foo(self):... print "foo"... >>> b = B() >>> def NewMethod(self):... print("new method!")... >>> import new 6-13

>>> b.newmethod = new.instancemethod(newmethod, b, B) >>> b.newmethod <bound method B.NewMethod of < main.b instance at 0x01FE9760>> >>> b.newmethod() New method! 6.3 動 態 刪 除 類 別 實 例 方 法 成 員 這 章 節 介 紹 如 何 將 動 態 新 增 的 類 別 實 例 刪 除, 我 們 可 以 使 用 del 敘 述 句 來 刪 除, 如 下 範 例 定 義 類 別, 名 稱 為 B >>> class B:... def init (self):... self.total = 10... def foo(self):... print("foo")... 定 義 NewMethod 函 數 >>> def NewMethod(self):... print("new method!") 建 立 實 例 b >>> b = B() 將 NewMethod 函 數 加 入 實 例 b >>> import new >>> b.newmethod = new.instancemethod(newmethod, b, B) >>> b.newmethod() New method! 使 用 del 敘 述 句 刪 除 NewMethod 函 數 >>> del b.newmethod 6-14

刪 除 後 再 呼 叫 時 就 會 出 現 AttributeError 錯 誤 訊 息, 因 為 實 例 內 已 經 沒 有 NewMethod 函 數 >>> b.newmethod() Traceback (most recent call last): File "<input>", line 1, in <module> AttributeError: B instance has no attribute 'NewMethod' 實 例 本 身 的 變 數 也 是 可 以 刪 除 的, 下 面 我 們 刪 除 了 原 本 在 類 別 內 定 義 的 b.total 實 例 變 數 >>> del b.total 重 新 呼 叫 就 會 出 現 AttributeError 錯 誤 訊 息, 因 為 實 例 b 裡 面 已 經 沒 有 該 變 數 名 稱 >>> print(b.total) Traceback (most recent call last): File "<input>", line 1, in <module> AttributeError: B instance has no attribute 'total' 那 麼 原 本 類 別 裡 面 定 義 的 foo() 方 法 成 員 可 以 刪 除 嗎? 答 案 是 不 行 的, 會 發 生 SyntaxError 錯 誤 訊 息 >>> del b.foo() File "<input>", line 1 SyntaxError: can't delete function call (<input>, line 1) >>> 使 用 類 別 6-15

摘 要 當 我 們 在 使 用 Python 的 類 別 時 並 不 用 去 宣 告 該 類 別 的 型 態, 也 不 用 去 宣 告 這 個 類 別 是 否 為 public 或 private,python 所 有 的 類 別 與 其 包 含 的 成 員 都 是 public 的 在 Python 程 式 語 言 裡 要 定 義 一 個 類 別 必 須 使 用 class 敘 述 句 我 們 可 以 使 用 doc 屬 性 (attribute) 來 呼 叫 該 物 件 的 備 註 說 明 定 義 好 類 別 後 我 們 必 須 建 立 一 個 物 件 的 實 例 (Instance) 才 能 使 用 物 件 類 別 內 的 方 法 (method) 宣 告 方 式 跟 函 數 一 樣, 您 可 以 想 像 類 別 方 法 就 像 是 將 函 數 放 進 類 別 裡 面, 差 異 性 在 於 函 數 的 引 數 部 份 必 須 要 加 入 self 敘 述 句, self 敘 述 句 就 像 其 他 程 式 語 言 裡 面 的 this Python 程 式 語 言 裡 的 類 別 有 一 個 特 別 方 法 (method) 稱 為 init (), 當 建 立 一 個 實 例 (Instance) 的 同 時 類 別 就 會 去 執 行 這 個 函 數 在 類 別 裡 面 有 所 謂 的 類 別 變 數 (class variable) 與 實 例 變 數 (Instance variable), 通 常 定 義 在 init () 建 構 函 數 (Constructors) 裡 面 的 稱 為 實 例 變 數, 而 在 類 別 的 init () 建 構 函 數 與 方 法 成 員 之 外 的 變 數 稱 為 類 別 變 數 類 別 變 數 會 在 建 立 的 實 例 (Instance) 之 間 共 存, 而 實 例 變 數 並 不 會 共 存 我 們 可 以 透 過 new 模 組 內 的 instancemethod() 函 數 來 新 增 方 法 成 員 到 實 例 類 別 裡 面 使 用 del 敘 述 句 來 刪 除 實 例 本 身 的 變 數, 但 是 本 身 已 定 義 好 的 方 法 成 員 是 不 能 刪 除 的 6-16

練 習 6.1 底 下 (1) 為 學 生 類 別, 請 使 用 new 模 組 與 動 態 新 稱 方 法 成 員 的 觀 念 改 變 printdetails 函 數, 並 且 新 增 一 個 email 屬 性 到 實 例 類 別 student1 裡, 並 輸 出 printdetails 函 數 結 果 與 下 面 一 樣 : >>> student1.printdetails("abc@gmail.com") 姓 名 : John 課 程 : ['C201'] email: abc@gmail.com (1) >>> class Student:... 學 生 類 別...... def init (self, name ="Huang", courses =[]):... self.name = name... self.courses = courses... print(" 建 立 實 例 : " + name)...... def printdetails(self):... print(" 姓 名 : ", self.name)... print(" 課 程 : ", self.courses)...... def enroll(self, course):... self.courses.append(course)... >>> student1 = Student("John", ["C201"]) 使 用 類 別 6.2 請 建 立 一 個 類 別, 並 定 義 一 個 全 域 變 數 命 名 為 value, 接 著 再 定 義 一 個 方 法 成 員 命 名 為 pow(x), 並 將 value 值 做 x 次 方 6-17

6-18