3-3 面向对象 本章总结
本章總結(jié)
練習(xí)題
使用實(shí)例進(jìn)行 獲取、設(shè)置、刪除 數(shù)據(jù), 分別會(huì)觸發(fā)類的什么私有方法
class A(object): pass a = A() a["key"] = "val" a = a["key"] del a["key"]python中經(jīng)典類和新式類的區(qū)別
如下示例, 請(qǐng)用面向?qū)ο蟮男问絻?yōu)化以下代碼
1、在沒有學(xué)習(xí)類這個(gè)概念時(shí),數(shù)據(jù)與功能是分離的def exc1(host,port,db,charset):conn=connect(host,port,db,charset)conn.execute(sql)return xxxdef 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ǔ)過程的名字')示例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)簡單解釋Python中 staticmethod(靜態(tài)方法)和 classmethod(類方法), 并分別補(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 繼承自父類的類屬性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)編寫一段符合多態(tài)特性的代碼.
很多同學(xué)都是學(xué)會(huì)了面向?qū)ο蟮恼Z法,卻依然寫不出面向?qū)ο蟮某绦?#xff0c;原因是什么呢?原因就是因?yàn)槟氵€沒掌握一門面向?qū)ο笤O(shè)計(jì)利器,即領(lǐng)域建模,請(qǐng)解釋下什么是領(lǐng)域建模,以及如何通過其設(shè)計(jì)面向?qū)ο蟮某绦?#xff1f;http://www.cnblogs.com/alex3714/articles/5188179.html?此blog最后面有詳解
請(qǐng)寫一個(gè)小游戲,人狗大站,2個(gè)角色,人和狗,游戲開始后,生成2個(gè)人,3條狗,互相混戰(zhàn),人被狗咬了會(huì)掉血,狗被人打了也掉血,狗和人的攻擊力,具備的功能都不一樣。注意,請(qǐng)按題14領(lǐng)域建模的方式來設(shè)計(jì)類。
編寫程序, 在元類中控制把自定義類的數(shù)據(jù)屬性都變成大寫.
編寫程序, 在元類中控制自定義的類無需init方法.
編寫程序, 如下有三點(diǎn)要求:
用面向?qū)ο蟮男问骄帉懸粋€(gè)老師角色, 并實(shí)現(xiàn)以下功能, 獲取老師列表, 創(chuàng)建老師、刪除老師、創(chuàng)建成功之后通過 pickle 序列化保存到文件里,并在下一次重啟程序時(shí)能
讀取到創(chuàng)建的老師, 例如程序目錄結(jié)構(gòu)如下.
根據(jù)23 題, 再編寫一個(gè)班級(jí)類, 實(shí)現(xiàn)以下功能, 創(chuàng)建班級(jí), 刪除班級(jí), 獲取班級(jí)列表、創(chuàng)建成功之后通過 pickle 序列化保存到文件里,并在下一次重啟程序時(shí)能
讀取到創(chuàng)建的班級(jí).
根據(jù) 23題, 編寫課程類, 實(shí)現(xiàn)以下功能, 創(chuàng)建課程(創(chuàng)建要求如上), 刪除課程, 獲取課程列表
根據(jù)23 題, 編寫學(xué)校類, 實(shí)現(xiàn)以下功能, 創(chuàng)建學(xué)校, 刪除學(xué)校, 獲取學(xué)校列表
通過23題, 它們雷同的功能, 是否可以通過繼承的方式進(jìn)行一些優(yōu)化
偽代碼 class Behavior(object): def fetch(self, keyword): 通過 keyword 參數(shù) 查詢出對(duì)應(yīng)的數(shù)據(jù)列表 class School(Behavior): pass class Teacher(Behavior): pass s = School() t = Teacher() s.fetch("school") t.fetch("teacher")轉(zhuǎn)載于:https://www.cnblogs.com/venicid/p/8652257.html
總結(jié)
以上是生活随笔為你收集整理的3-3 面向对象 本章总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ORACLE1.22 %type %ro
- 下一篇: MongoDB Sharding分片配置