時隔n個月,up終於想起了自己的密碼.回來更文.因為剛開始寫,代碼不是很簡潔.不過答案都是測試過的.話不多說,Here we go!
1.練習
請把下面的Student對象的gender字段對外隱藏起來,用get_gender()和set_gender()代替,並檢查參數有效性:

解答:
class Student(object): def __init__(self, name, gender): self.__name = name self.__gender = gender def get_name(self): return self.__name def set_gender(self,gender): if self.__gender =='female'or'male': self.__gender=gender else: raise ValueError('bad gender') def get_gender(self): return self.__gender
課后補充:
1.這里也可以寫成 if gender in('male','female'):
2.題目上沒說名字不能改.但是保險起見,還是把名字限制住
2.練習
為了統計學生人數,可以給Student類增加一個類屬性,每創建一個實例,該屬性自動增加:

解答:
class Student(object): count = 0 def __init__(self, name): self.name = name self.__set__count() def __set__count(self): Student.count +=1
課后補充:不要讓實例屬性和類屬性的名稱相同!
3.練習
請利用@property給一個Screen對象加上width和height屬性,以及一個只讀屬性resolution:

解答:
class Screen(object): @property def width(self): return self._width @width.setter def width(self,value): self._width=value @property def height(self): return self._height @height.setter def height(self,value): self._height=value @property def resolution(self): return self._width*self._height
課后補充:1.resolution有分辨率的意思,分辨率=長度*寬度
2._width和_height是為了區別width和height,不加下划線也行但名字不能相同!
4.練習
把Student的gender屬性改造為枚舉類型,可以避免使用字符串:

解答:
from enum import Enum,unique @unique class Gender(Enum): Male = 0 Female = 1 class Student(object): def __init__(self, name, gender): self.name = name self.gender = gender
課后補充:
這個題不太理解,稀里糊塗地做出來了.
下面粘貼一段枚舉類型的筆記輔助理解.


