opp小节
本章總結(jié)
練習(xí)題
使用實(shí)例進(jìn)行 獲取、設(shè)置、刪除 數(shù)據(jù), 分別會(huì)觸發(fā)類(lèi)的什么私有方法
class A(object): pass a = A() a["key"] = "val" a = a["key"] del a["key"]python中經(jīng)典類(lèi)和新式類(lèi)的區(qū)別
如下示例, 請(qǐng)用面向?qū)ο蟮男问絻?yōu)化以下代碼
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 # 每次調(diào)用都需要重復(fù)傳入一堆參數(shù) exc1('127.0.0.1',3306,'db1','utf8','select * from tb1;') exc2('127.0.0.1',3306,'db1','utf8','存儲(chǔ)過(guò)程的名字')示例1, 現(xiàn)有如下代碼, 會(huì)輸出什么:
class People(object): __name = "luffy" __age = 18 p1 = People() print(p1.__name, p1.__age)示例2, 現(xiàn)有如下代碼, 會(huì)輸出什么:
class People(object): def __init__(self): print("__init__") def __new__(cls, *args, **kwargs): print("__new__") return object.__new__(cls, *args, **kwargs) People()請(qǐng)簡(jiǎn)單解釋Python中 staticmethod(靜態(tài)方法)和 classmethod(類(lèi)方法), 并分別補(bǔ)充代碼執(zhí)行下列方法。
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()請(qǐng)執(zhí)行以下代碼,解釋錯(cuò)誤原因,并修正錯(cuò)誤。
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()下面這段代碼的輸出結(jié)果將是什么?請(qǐng)解釋。
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 繼承自父類(lèi)的類(lèi)屬性x,所以都一樣,指向同一塊內(nèi)存地址 # 1 2 1 更改Child1,Child1的x指向了新的內(nèi)存地址 # 3 2 3 更改Parent,Parent的x指向了新的內(nèi)存地址多重繼承的執(zhí)行順序,請(qǐng)解答以下輸出結(jié)果是什么?并解釋。
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請(qǐng)編寫(xiě)一段符合多態(tài)特性的代碼.
很多同學(xué)都是學(xué)會(huì)了面向?qū)ο蟮恼Z(yǔ)法,卻依然寫(xiě)不出面向?qū)ο蟮某绦?#xff0c;原因是什么呢?原因就是因?yàn)槟氵€沒(méi)掌握一門(mén)面向?qū)ο笤O(shè)計(jì)利器,即領(lǐng)域建模,請(qǐng)解釋下什么是領(lǐng)域建模,以及如何通過(guò)其設(shè)計(jì)面向?qū)ο蟮某绦?#xff1f;http://www.cnblogs.com/alex3714/articles/5188179.html?此blog最后面有詳解
請(qǐng)寫(xiě)一個(gè)小游戲,人狗大站,2個(gè)角色,人和狗,游戲開(kāi)始后,生成2個(gè)人,3條狗,互相混戰(zhàn),人被狗咬了會(huì)掉血,狗被人打了也掉血,狗和人的攻擊力,具備的功能都不一樣。注意,請(qǐng)按題14領(lǐng)域建模的方式來(lái)設(shè)計(jì)類(lèi)。
編寫(xiě)程序, 在元類(lèi)中控制把自定義類(lèi)的數(shù)據(jù)屬性都變成大寫(xiě).
編寫(xiě)程序, 在元類(lèi)中控制自定義的類(lèi)無(wú)需init方法.
編寫(xiě)程序, 如下有三點(diǎn)要求:
用面向?qū)ο蟮男问骄帉?xiě)一個(gè)老師角色, 并實(shí)現(xiàn)以下功能, 獲取老師列表, 創(chuàng)建老師、刪除老師、創(chuàng)建成功之后通過(guò) pickle 序列化保存到文件里,并在下一次重啟程序時(shí)能
讀取到創(chuàng)建的老師, 例如程序目錄結(jié)構(gòu)如下.
根據(jù)23 題, 再編寫(xiě)一個(gè)班級(jí)類(lèi), 實(shí)現(xiàn)以下功能, 創(chuàng)建班級(jí), 刪除班級(jí), 獲取班級(jí)列表、創(chuàng)建成功之后通過(guò) pickle 序列化保存到文件里,并在下一次重啟程序時(shí)能
讀取到創(chuàng)建的班級(jí).
根據(jù) 23題, 編寫(xiě)課程類(lèi), 實(shí)現(xiàn)以下功能, 創(chuàng)建課程(創(chuàng)建要求如上), 刪除課程, 獲取課程列表
根據(jù)23 題, 編寫(xiě)學(xué)校類(lèi), 實(shí)現(xiàn)以下功能, 創(chuàng)建學(xué)校, 刪除學(xué)校, 獲取學(xué)校列表
通過(guò)23題, 它們雷同的功能, 是否可以通過(guò)繼承的方式進(jìn)行一些優(yōu)化
偽代碼class Behavior(object): def fetch(self, keyword): 通過(guò) keyword 參數(shù) 查詢(xún)出對(duì)應(yīng)的數(shù)據(jù)列表 class School(Behavior): pass class Teacher(Behavior): pass s = School() t = Teacher() s.fetch("school") t.fetch("teacher")總結(jié)
- 上一篇: py-opp 类(class)
- 下一篇: 面向对象作业