python之反射--選課例子

來源:互聯網
上載者:User

標籤:return   enumerate   run   縮排   預設   term   選擇   通過   one   

在這個例子中用到了反射和枚舉的用法,裡面有各種注意事項,是個不錯的練習題

total_couese_list = []  # 把函數run中的變數當成全域變數放在這裡class Course():    def __init__(self, name, price, period):        self.name = name        self.price = price        self.period = period    func_list = [{"text": "選課", "name": "select_course", "param": "cs"},                 {"text": "查看課程", "name": "show_selectd_course", "param": "None"},                 {"text": "刪除課程", "name": "del_selectd_course", "param": "None"},                 ]class Student():    def __init__(self, name):        self.name = name        self.course = []    def select_course(self, ):        """選擇課程,已選則不能再選"""  # 當選課的時候,把所選課程都羅列出來,同下面主函數中的枚舉一樣        for i, iterm in enumerate(total_couese_list, 1):  # 枚舉傳參數,前面是可迭代對象,後面是序號,預設從幾開始            print(i, iterm.name, )  # 因為加入到列表中的是一個對象,對象取值只能通過“.屬性”這種方法        num = input("請輸入你要選的課程")        num = num - 1        course_obj = total_couese_list[num]        if course_obj not in self.course:            self.course.append(course_obj)    def show_selectd_course(self):        """查看已選擇的課程"""    def del_selectd_course(self):        """刪除已選擇的課程"""def run():    """    主程式        1,根據Course類建立10個課程        2,使用者輸入姓名,動態建立學生對象        3,查看所選課程        4,為學生選課        5,刪除已選課程    :return:    """    # total_couese_list=[]                     #把total_couese_list當成全域變數    for i in range(10):        obj = Course(‘XX-%s‘ % i, 90, 90)        total_couese_list.append(obj)  # 添加到列表中的是10個執行個體    stu_name = input("請輸入學生姓名:")  # 這兩個一起寫就可以實列化一個對象,這本來沒有什麼了不起,    stu = Student(stu_name)  # 但是養成一種習慣就代表了一種思路    for key, iterm in enumerate(Course.func_list, 1):  # 枚舉傳參數,前面是可迭代對象,後面是序號,預設從幾開始        print(key, iterm["text"])  # 拿到Course中的字串,準備做反射    while True:   #***while這個邏輯關係是寫在fun中的,whil要是頂格寫後面的執行個體stu就不能識別了,在這出過錯,太坑了        num = int(input("請輸入要執行的功能序號:"))        num = num - 1        name = Course.func_list[num]["name"]  # 通過枚舉的提示,在藉助使用者的輸入和枚舉關聯起來        print(name)  # 現在的name值是取到的要執行的功能的名字,只是個字串而已        act1 = getattr(stu, name)  # 通過反射取到Student類中的對應方法,具體取哪個方法是使用者輸入序號,通過枚舉關聯到字串取值的        print(act1())  # 上面取到的是一個函數名        # 通過反射取到的類中的方法怎麼傳參?主要看反射取值的時候傳參是類還是對象,在就是縮排,縮排        #寫錯了,邏輯就亂了        act1()if __name__ =="__main__":    run()

 

python之反射--選課例子

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.