[Day11] 類別(class)與物件導向程式設計


請先在 Accupass 活動通報名,並參考課程兌換教學完成課程兌換。


問題討論區
加入問題討論
作業任務區
提交作業任務


ciem273555 Dec 17, 2019

老師:
在作業任務區的 隨堂練習:存取屬性與執行方法 那部份的解答貼錯了

happycoder Dec 17, 2019

Oops, 感謝提醒,好像貼太快了,已經更新:)


dorishsiao007 Dec 18, 2019

在封裝的範例中,對於 @property & @shout_number.setter 這兩個裝飾器有以下疑問想要釐清,謝謝

  1. @property: 下方範例程式碼意思是將 shout_number 函式經過 @property 裝飾器處理後,可以直接將 shout_number 方法變成屬性提供外部以 "instance.shout_number" 方式直接存取嗎?

     @property
     def shout_number(self):
         return self.__shout_num
    
  2. @shout_number.setter: 下方範例程式碼,將 shout_num 函式經過 setter 裝飾後,可直接將 shout_num 函式當作屬性值設定修改屬性值內容(EX: instance.shout_num = 'Cat')嗎?

     @shout_number.setter
     def shout_num(self, num):
         self.__shout_num = num
    
  3. 這兩個裝飾器查詢後似乎都是內建提供的,封裝概念對個人而言較抽象,所以額外查詢一些文章,發現該篇說明蠻清楚,分享供大家參考XD
    https://medium.com/bryanyang0528/python-setter-%E5%92%8C-getter-6c08a9d37d46

  4. 繼承Class問題,請問如果子類要繼承父類的init方法時,是否父類所有初始化參數都要繼承? 不能只繼承父類的一個參數,執行以下程式碼會出現以下錯誤.
    Traceback (most recent call last):
    File "main.py", line 18, in
    dog_1 = Dog('red', 'Lin')
    File "main.py", line 11, in init super().init(name)
    TypeError: init() missing 1 required positional argument: 'age'

class Animal:
  def __init__(self, name, age):
    self.name = name
    self.age = age

  def run(self):
    print('Animal Run!!!')

class Dog(Animal):
  def __init__(self, color, name):
    super().__init__(name)
    self.color = color

  def call(self):
    print('Dog Call!!!')

dog_1 = Dog('red', 'Lin')
dog_1.call()
dog_1.run()
print(dog_1.name, dog_1.color)