opp小节
本章總結
練習題
使用實例進行 獲取、設置、刪除 數據, 分別會觸發類的什么私有方法
class A(object): pass a = A() a["key"] = "val" a = a["key"] del a["key"]python中經典類和新式類的區別
如下示例, 請用面向對象的形式優化以下代碼
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','存儲過程的名字')示例1, 現有如下代碼, 會輸出什么:
class People(object): __name = "luffy" __age = 18 p1 = People() print(p1.__name, p1.__age)示例2, 現有如下代碼, 會輸出什么:
class People(object): def __init__(self): print("__init__") def __new__(cls, *args, **kwargs): print("__new__") return object.__new__(cls, *args, **kwargs) People()請簡單解釋Python中 staticmethod(靜態方法)和 classmethod(類方法), 并分別補充代碼執行下列方法。
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()請執行以下代碼,解釋錯誤原因,并修正錯誤。
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()下面這段代碼的輸出結果將是什么?請解釋。
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指向了新的內存地址多重繼承的執行順序,請解答以下輸出結果是什么?并解釋。
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請編寫一段符合多態特性的代碼.
很多同學都是學會了面向對象的語法,卻依然寫不出面向對象的程序,原因是什么呢?原因就是因為你還沒掌握一門面向對象設計利器,即領域建模,請解釋下什么是領域建模,以及如何通過其設計面向對象的程序?http://www.cnblogs.com/alex3714/articles/5188179.html?此blog最后面有詳解
請寫一個小游戲,人狗大站,2個角色,人和狗,游戲開始后,生成2個人,3條狗,互相混戰,人被狗咬了會掉血,狗被人打了也掉血,狗和人的攻擊力,具備的功能都不一樣。注意,請按題14領域建模的方式來設計類。
編寫程序, 在元類中控制把自定義類的數據屬性都變成大寫.
編寫程序, 在元類中控制自定義的類無需init方法.
編寫程序, 如下有三點要求:
用面向對象的形式編寫一個老師角色, 并實現以下功能, 獲取老師列表, 創建老師、刪除老師、創建成功之后通過 pickle 序列化保存到文件里,并在下一次重啟程序時能
讀取到創建的老師, 例如程序目錄結構如下.
根據23 題, 再編寫一個班級類, 實現以下功能, 創建班級, 刪除班級, 獲取班級列表、創建成功之后通過 pickle 序列化保存到文件里,并在下一次重啟程序時能
讀取到創建的班級.
根據 23題, 編寫課程類, 實現以下功能, 創建課程(創建要求如上), 刪除課程, 獲取課程列表
根據23 題, 編寫學校類, 實現以下功能, 創建學校, 刪除學校, 獲取學校列表
通過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")總結
- 上一篇: py-opp 类(class)
- 下一篇: 面向对象作业