面向對象練習及答案

練習題

  1. 面向對象三大特性,各有什麼用處,說說你的理解。
  2. 類的屬性和對象的屬性有什麼區別?
  3. 面向過程編程與面向對象編程的區別與應用場景?
  4. 類和對象在內存中是如何保存的。
  5. 什麼是綁定到對象的方法、綁定到類的方法、解除綁定的函數、如何定義,如何調用,給誰用?有什麼特性
  6. 使用實例進行 獲取、設置、刪除 數據, 分別會觸發類的什麼私有方法html

    class A(object):
         pass
    
     a = A()
    
     a["key"] = "val"
     a = a["key"]
     del a["key"]
  7. python中經典類和新式類的區別python

  8. 以下示例, 請用面向對象的形式優化如下代碼linux

    def exc1(host,port,db,charset,sql):
           conn=connect(host,port,db,charset)
           conn.execute(sql)
           return xxx
       def exc2(host,port,db,charset,proc_name)
           conn=connect(host,port,db,charset)
           conn.call_proc(sql)
           return xxx
       # 每次調用都須要重複傳入一堆參數
       exc1('127.0.0.1',3306,'db1','utf8','select * from tb1;')
       exc2('127.0.0.1',3306,'db1','utf8','存儲過程的名字')
  9. 示例1, 現有以下代碼, 會輸出什麼:sql

    class People(object):
          __name = "luffy"
          __age = 18
    
      p1 = People()
      print(p1.__name, p1.__age)
  10. 示例2, 現有以下代碼, 會輸出什麼:編程

    class People(object):
    
       def __init__(self):
           print("__init__")
    
       def __new__(cls, *args, **kwargs):
           print("__new__")
           return object.__new__(cls, *args, **kwargs)
    
    People()
  11. 請簡單解釋Python中 staticmethod(靜態方法)和 classmethod(類方法), 並分別補充代碼執行下列方法。json

    class A(object):
    
       def foo(self, x):
           print("executing foo(%s, %s)" % (self,x))
    
       @classmethod
       def class_foo(cls, x):
           print("executing class_foo(%s, %s)" % (cls,x))
    
       @staticmethod
       def static_foo(x):
           print("executing static_foo(%s)" % (x))
    
    a = A()
  12. 請執行如下代碼,解釋錯誤緣由,並修正錯誤。數據結構

    class Dog(object):
    
       def __init__(self,name):
           self.name = name
    
       @property
       def eat(self):
           print(" %s is eating" %self.name)
    
    d = Dog("ChenRonghua")
    d.eat()
  13. 下面這段代碼的輸出結果將是什麼?請解釋。函數

    class Parent(object):
       x = 1
    
    class Child1(Parent):
       pass
    
    class Child2(Parent):
       pass
    
    print(Parent.x, Child1.x, Child2.x)
    Child1.x = 2
    print(Parent.x, Child1.x, Child2.x)
    Parent.x = 3
    print(Parent.x, Child1.x, Child2.x)
    
    # 1 1 1 繼承自父類的類屬性x,因此都同樣,指向同一塊內存地址
    # 1 2 1 更改Child1,Child1的x指向了新的內存地址
    # 3 2 3 更改Parent,Parent的x指向了新的內存地址
  14. 多重繼承的執行順序,請解答如下輸出結果是什麼?並解釋。fetch

    class A(object):
       def __init__(self):
           print('A')
           super(A, self).__init__()
    
    class B(object):
       def __init__(self):
           print('B')
           super(B, self).__init__()
    
    class C(A):
       def __init__(self):
           print('C')
           super(C, self).__init__()
    
    class D(A):
       def __init__(self):
           print('D')
           super(D, self).__init__()
    
    class E(B, C):
       def __init__(self):
           print('E')
           super(E, self).__init__()
    
    class F(C, B, D):
       def __init__(self):
           print('F')
           super(F, self).__init__()
    
    class G(D, B):
       def __init__(self):
           print('G')
           super(G, self).__init__()
    
    if __name__ == '__main__':
       g = G()
       f = F()
    
    # G
    # D
    # A
    # B
    #
    # F
    # C
    # B
    # D
    # A
  15. 請編寫一段符合多態特性的代碼.優化

  16. 不少同窗都是學會了面向對象的語法,卻依然寫不出面向對象的程序,緣由是什麼呢?緣由就是由於你還沒掌握一門面向對象設計利器,即領域建模,請解釋下什麼是領域建模,以及如何經過其設計面向對象的程序?http://www.cnblogs.com/alex3714/articles/5188179.html 此blog最後面有詳解

  17. 請寫一個小遊戲,人狗大站,2個角色,人和狗,遊戲開始後,生成2我的,3條狗,互相混戰,人被狗咬了會掉血,狗被人打了也掉血,狗和人的攻擊力,具有的功能都不同。注意,請按題14領域建模的方式來設計類。

  18. 編寫程序, 在元類中控制把自定義類的數據屬性都變成大寫.

  19. 編寫程序, 在元類中控制自定義的類無需init方法.

  20. 編寫程序, 編寫一個學生類, 要求有一個計數器的屬性, 統計總共實例化了多少個學生.
  21. 編寫程序, A 繼承了 B, 倆個類都實現了 handle 方法, 在 A 中的 handle 方法中調用 B 的 handle 方法
  22. 編寫程序, 以下有三點要求:
    

    1. 自定義用戶信息數據結構, 寫入文件, 而後讀取出內容, 利用json模塊進行數據的序列化和反序列化
    e.g
    {
        "egon":{"password":"123",'status':False,'timeout':0},
        "alex":{"password":"456",'status':False,'timeout':0},
    }
    1. 定義用戶類,定義方法db,例如 執行obj.db能夠拿到用戶數據結構
    2. 在該類中實現登陸、退出方法, 登陸成功將狀態(status)修改成True, 退出將狀態修改成False(退出要判斷是否處於登陸狀態).密碼輸入錯誤三次將設置鎖定時間(下次登陸若是和當前時間比較大於10秒即不容許登陸)
  23. 用面向對象的形式編寫一個老師角色, 並實現如下功能, 獲取老師列表, 建立老師、刪除老師、建立成功以後經過 pickle 序列化保存到文件裏,並在下一次重啓程序時能
    讀取到建立的老師, 例如程序目錄結構以下.

    .
    |-- bin/
    |   |-- main.py         程序運行主體程序(可進行菜單選擇等)
    |-- config/
    |   |-- settings.py     程序配置(例如: 配置存儲建立老師的路徑相關等)
    |-- db                  數據存儲(持久化, 使得每次再重啓程序時, 相關數據對應保留)
    |   |-- teachers/          存儲全部老師的文件
    |   |-- ...                ...
    |-- src/                程序主體模塊存放
    |   |-- __init__.py
    |   |-- teacher.py      例如: 實現老師相關功能的文件
    |   |-- group.py        例如: 實現班級相關的功能的文件
    |-- manage.py           程序啓動文件
    |-- README.md           程序說明文件
  24. 根據23 題, 再編寫一個班級類, 實現如下功能, 建立班級, 刪除班級, 獲取班級列表、建立成功以後經過 pickle 序列化保存到文件裏,並在下一次重啓程序時能
    讀取到建立的班級.

  25. 根據 23題, 編寫課程類, 實現如下功能, 建立課程(建立要求如上), 刪除課程, 獲取課程列表

  26. 根據23 題, 編寫學校類, 實現如下功能, 建立學校, 刪除學校, 獲取學校列表

  27. 經過23題, 它們雷同的功能, 是否能夠經過繼承的方式進行一些優化

    僞代碼
    class Behavior(object):
    
        def fetch(self, keyword):
            經過 keyword 參數 查詢出對應的數據列表
    
    class School(Behavior):
    
        pass
    
    class Teacher(Behavior):
    
        pass
    
    s = School()
    t = Teacher()
    
    s.fetch("school")
    t.fetch("teacher")

本章做業

題目:選課系統開發,要求有四種角色:學校、學員、課程、講師

詳細要求:

  1. 建立北京、上海 2 所學校

  2. 建立linux , python , go 3個課程 , linux\py 在北京開, go 在上海開

  3. 課程包含,週期,價格,經過學校建立課程

  4. 經過學校建立班級, 班級關聯課程、講師

  5. 建立學員時,選擇學校,關聯班級

  6. 建立講師角色時要關聯學校

  7. 提供兩個角色接口

  8. 爲學員、講師、管理員分別提供用戶界面,並提供對應功能: 1 學員視圖, 能夠註冊, 交學費, 選擇班級, 2 講師視圖, 講師可管理本身的班級, 上課時選擇班級, 查看班級學員列表 , 修改所管理的學員的成績 3 管理視圖,建立講師, 建立班級,建立課程

注1:上面的操做產生的數據都經過pickle序列化保存到文件裏 注2:此做業必須畫流程圖,圖中標註好不一樣類或對象之間的調用關係

相關文章
相關標籤/搜索