[自用備份]廖雪峰python面向對象習題作業


時隔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對象加上widthheight屬性,以及一個只讀屬性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.練習

Studentgender屬性改造為枚舉類型,可以避免使用字符串:

 

 

解答:

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

課后補充:

這個題不太理解,稀里糊塗地做出來了.

下面粘貼一段枚舉類型的筆記輔助理解.

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM