🐍
北商資管Python課程(2)
  • 一. 課程內容
    • (一) 函式
      • 1. 有一個參數的函式
      • 2. 有多個參數的函式
      • 3. 有預設值的參數
      • 4. 用「*」接收多個positional引數
      • 5. 用「*」接收多個成對的引數
      • 6. 用「**」接收多個keyword引數
      • 7. 同時用「*」及「**」接收引數
      • 8. 參數接收的是引數的「參照」
      • 9. 回傳多個值
      • 10. 使用lamba函式
      • 11. 傳遞函式物件
      • 12. 遞迴函式
      • 13. 閉包
      • 14. 執行緒
      • 15. 裝飾器
      • 16. 產生器
    • (二) 類別
      • 1. 建立一個沒有內容的類別
      • 2. 增加建構元、設定實體變數
      • 3. 增加實體方法
      • 4. 增加類別變數
      • 5. 增加靜態方法
      • 6. 增加類別方法
      • 7. 設定私用變數
      • 8. 使用@property
      • 9. 使用@<屬性名稱>.setter
      • 10. 繼承 - 呼叫父親的建構元
      • 11. 繼承 - 取用父親的私用變數
      • 12. 繼承 - 覆寫父親的方法
      • 13. 繼承 - 抽象類別
      • 14. 繼承 - 多型
      • 15. 繼承 - 多重繼承
    • (三) 魔術方法
      • 1. __init__(self, ...)
      • 2. __str__(self)
      • 3. __repr__(self)
      • 4. __len__(self)
      • 5. __eq__(self, other)
      • 6. 其他的比較方法
      • 7. __getitem__(self, key)
      • 8. __setitem__(self, key, value)
      • 9. __delitem__(self, key)
      • 10. __contains__(self, item)
      • 11. __add__(self, obj)
      • 12. 其他的計算
      • 13. __call__(self, params)
      • 14. __iter__(self) 和 __next__(self)
    • (四) association
      • 1. 單向關連
      • 2. 雙向關連
    • (五) composition
      • 1. 範例一
    • (六) aggregation
      • 1. 範例一
  • 二. 資料檔
  • 三. ITS認證考試
    • 1. ITS 認證考古題
    • 2. ITS 認證解題影片
  • 四. 練習
    • 1. 計算成績
    • 2. 計算傭金
    • 3. 計算加權成績
    • 4. 計算運費
    • 5. 計算門票費用
    • 6. 計算不定個數成績的平均
    • 7. 計算購買金額
    • 8. 計算成績
    • 9. 計算總金額
    • 10. 處理分數清單 – 使用淺拷貝
    • 11. 清單中元素的出現次數
    • 12. 回傳成績及等級
    • 13. 清單的旋轉
    • 14. 清單內的元素交換
    • 15. 字串內的字元交換
    • 16. 清單內的元素重覆
    • 17. 字串的旋轉
    • 18. 字串的排列
    • 19. 字串的組合
    • 20. 讀檔, 回傳總分及平均
    • 21. 讀檔, 排序總分及平均
    • 22. 讀檔, 不定個數的參數
    • 23. 讀檔, 不定個數的keyword參數
    • 24. 計算「固定費率」的電費
    • 25. 計算「階梯費率」的電費
    • 26. 期中考練習
    • 27. 期中考練習-leetcode
    • 28. 遞迴
    • 29. 執行緒
    • 30. 裝飾器
    • 31. 類別
    • 32. getter及setter
    • 33. 私用屬性
    • 34. 裝飾屬性
    • 35. 傳送參數給 「方法」
    • 36. 繼承 (租車)
    • 37. 繼承 (員工)
    • 38. 抽象類別 (員工)
    • 39. 抽象類別 (觀光)
    • 40. 期末考練習 (1)
    • 41. 期末考練習 (2)
    • 42. 期末考練習 (3) - 搭配AI
    • 43. 期末考
  • 五. 搭配AI的問題
    • 1. 產生類別圖-封裝
    • 2. 產生類別圖-繼承
    • 3. 產生類別圖-抽象
    • 4. 由類別圖產生Python程式
  • 六. pygame
    • 1. 靜態畫面
    • 2. 靜態畫面-多個物件
    • 3. 動畫-下墜的圓
    • 4. 動畫-子彈
  • 七. 其他
    • 1. 函式文件撰寫範例
Powered by GitBook
On this page
  • (1) 用__設定私用的實體變數
  • 以下是一個例子:
  • 執行結果:
  • 說明:
  • (2) 用__設定私用的實體變數會被存成新名稱
  • 執行結果:
  • (3) 用_設定私用的實體變數
  • 執行結果:
  • 說明:
  • 問題:
  1. 一. 課程內容
  2. (二) 類別

7. 設定私用變數

私用變數(private variable)的寫法是在變數前方加上2個底線(underscore)。在類別中定義私用變數只在類別內使用,在其外即使寫相同的名稱也無法取用它。

(1) 用__設定私用的實體變數

以下是一個例子:

class Student():
    def __init__(self, no, name):
        self.__no = no
        self.__name = name
        
    def setNo(self, no):
        self.__no = no
    
    def setName(self, name):
        self.__name = name
        
    def getNo(self):
        return self.__no
    
    def getName(self):
        return self.__name 

第3及4行各宣告一個私用的實體變數。 第7, 10, 13, 16行是在類別之內,可以取用私用變數。

以下是一個使用它們的例子:

s = Student('110001', '王小明')
print(s.getNo())
print(s.getName())

print(s.__no)

執行結果:

110001 王小明 Traceback (most recent call last): File "d:\1102-Python\2-7.py", line 23, in print(s.__no) AttributeError: 'Student' object has no attribute '__no'

說明:

(2) 用__設定私用的實體變數會被存成新名稱

以上的私用實體變數被存成新名稱,使用dir()函式可以查看內容:

s = Student('110001', '王小明')

print(dir(s))
print(s._Student__name)

執行結果:

(3) 用_設定私用的實體變數

用1個底線設定私用變數並不會改變儲存時的變數名稱,在類別之外也能取存此種私用變數。在模組中使用1個底線設定的方式也稱為weak private indicator。如果用 from ... import * 的指令匯入其他模組時,用1個底線設定的私用類別、函式、變數將不會被匯入。

class Student():
    def __init__(self, no, name):
        self._no = no
        self._name = name
        
    def setNo(self, no):
        self._no = no
    
    def setName(self, name):
        self._name = name
        
    def getNo(self):
        return self._no
    
    def getName(self):
        return self._name  
    

以下是一個使用的例子:

s = Student('110001', '王小明')
print(s.getNo())
print(s._no)
print(dir(s))

執行結果:

110001 110001 ['class', 'delattr', 'dict', 'dir', 'doc', 'eq', 'format', 'ge', 'getattribute', 'gt', 'hash', 'init', 'init_subclass', 'le', 'lt', 'module', 'ne', 'new', 'reduce', 'reduce_ex', 'repr', 'setattr', 'sizeof', 'str', 'subclasshook', 'weakref', '_name', '_no', 'getName', 'getNo', 'setName', 'setNo']

說明:

問題:

撰寫一個「成績」(Score)的類別,每個實體有3個私用實體變數,包括國文、英文、數學。請生成以下實體,再印出其國文、英文、數學成測: 國文70,英文50,數學90 國文80,英文65,數學75 國文75,英文80,數學85

Previous6. 增加類別方法Next8. 使用@property