最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

0718-面相對象(2)

2023-07-19 22:46 作者:GHWNM  | 我要投稿

如果沒定義__str__則print的時候默認打印__repr__

__add__,定義之后就是'+'號,__iadd__,定義之后就是'+='號

如果沒有__iadd__,就默認調(diào)__add__,__iadd__是+=,累加,可變數(shù)據(jù)+=前后都是相同地址/對象? # __iadd__

不可變數(shù)據(jù),比如元組+=前后是不同地址,所以元組確實不能變,你硬+就是給你換了個新地址/對象? #__add__ return hself

也就是說__add__一定返回新,__iadd__一定返回舊

在class里定義__repr__,返回一個符合python語法的字符串

然后就能eval(repr(a1))

;‘

重要: __eq__是比較運算符(==)的魔法方法,默認是按照地址比較,重寫一般可以把他比較內(nèi)容

__gt__是比較運算符(>)大于,而且python自帶的max,min,sort,index,count都會受這個影響(不止這些,remove,in啊,等等還有非常非常多的函數(shù))

python的list里給你專門重寫了eq的,比較的不再是地址,而是內(nèi)容

或許python跟其他不一樣就因為這些,方便,但是性能低,因為他比較啊,這些底層的魔法方法相對于C++,C等等來說要復雜很多

就比如==,python會給你比較內(nèi)容,方便,但是慢; C++就只給你比較地址,很麻煩,但是快

再查了GPT之后發(fā)現(xiàn)魔法方法不是主要的,但是確實在特定環(huán)境下重寫魔法方法會節(jié)省一定的性能開銷

舉個例子,如果你需要自定義一個類來表示大量的數(shù)據(jù),而且你知道在進行比較操作時,并沒有必要考慮所有的實例屬性,

你可以手動重寫__eq__(相等)和__ne__(不等)魔法方法,只比較你認為重要的屬性,從而避免不必要的屬性比較,從而提高性能

然而,需要注意的是,這種優(yōu)化可能會犧牲一些代碼的可讀性和?靈活性。在進行性能優(yōu)化時,最好先進行性能測試,確保自己的優(yōu)化確實有顯著的效果

另外,Python的運行速度一般是受到算法和數(shù)據(jù)結(jié)構(gòu)的影響更大,對這些進行優(yōu)化可能會比簡單地重寫魔法方法更有效

所以其實在C,C++等這些里面可以自己定義類似于python的函數(shù)或魔法屬性,也就是自己寫一個庫,會比python的更快

然而,需要注意的是,使用編譯型語言編寫庫通常需要更多的時間和努力,因為你需要手動管理內(nèi)存、處理指針等低級別的操作


這個改魔法屬性的很靈活,筆記上不好記,但是牢記很多東西是基于eq來比較的,所以更改eq很靈活,也要謹慎的對待

remove可以理解為電腦,然后廠商就想我要鏈啥,麥克風,攝像頭,那么他就做了個接口(USB),相當于pyt的hon里的object

我們做的這些模型相當于就是所有的計算機外設(shè),這就是軟件設(shè)計架構(gòu)的基本思想

客戶端代碼 --> 接口(父類,爸爸) -約束/規(guī)定/統(tǒng)一-> 具體功能


面向?qū)ο蠹軜?gòu)設(shè)計思想


總結(jié):

1. 封裝 根據(jù)需求劃分為多個類型,為每個類型分配職責

分而治之,變而疏之,分治法

2. 繼承 統(tǒng)一多個類型的共性行為 聽父類的

所以不能改框架,比如remove,但是能改eq,能改比較的規(guī)則,隔離客戶端代碼與各種功能的變化

3. 多態(tài) 父類的方法在子類上有不同的體現(xiàn)(被重寫了) 聽子類的

編碼時調(diào)用父類行為,運行時創(chuàng)建子類對象執(zhí)行子類行為


所以父類是框架,調(diào)用它是因為穩(wěn)定,如果你創(chuàng)建的時候調(diào)用的是那個具體的Model,調(diào)用的就是Model具體的eq策略(或其他)了

這樣就可以達成本次的目標: ---開閉原則---

對擴展開放,對修改關(guān)閉

允許以類為單元增加新功能,不用(不能)修改客戶端代碼

舉個例子,remove就是客戶端,他不改吧,但是每天做這些新代碼他都能幫我們刪掉

print也是,他能打印各種各樣新的類型,但是函數(shù)本身沒變過

只需要修改__str__,__eq__等就行


所以這個框架實際上類似于HTTP協(xié)議,把后續(xù)擴展的東西規(guī)定格式(函數(shù)名,參數(shù),返回值)

以便于后續(xù)功能擴展和客戶端對接,這里引用GPT的話一下:

面向?qū)ο蟮募軜?gòu)用于設(shè)計和開發(fā)復雜的軟件系統(tǒng)。它提供了一種組織和管理系統(tǒng)中各個組件的方式,使得系統(tǒng)具有更好的可維護性、可復用性和擴展性。以下是面向?qū)ο蟮募軜?gòu)的幾個主要目標:


? ? 模塊化:面向?qū)ο蟮募軜?gòu)將系統(tǒng)劃分為多個獨立的模塊,每個模塊都具有清晰的功能和接口。這種模塊化的設(shè)計使得系統(tǒng)更易于理解、修改和維護。


? ? 封裝:面向?qū)ο蟮募軜?gòu)通過封裝數(shù)據(jù)和操作,將數(shù)據(jù)和操作組織為一個整體。這樣可以隱藏實現(xiàn)細節(jié),

? ? 使得模塊之間的耦合降低,提高了代碼的可重用性和模塊的獨立性。


? ? 繼承:面向?qū)ο蟮募軜?gòu)通過繼承機制,實現(xiàn)了代碼的重用。

? ? 通過繼承,可以定義一個通用的基類,然后通過派生類對基類進行擴展和定制。這樣可以減少代碼的冗余,提高了代碼的復用性和可維護性。


? ? 多態(tài):面向?qū)ο蟮募軜?gòu)通過多態(tài)性,提供了一種更加靈活和可擴展的設(shè)計方式。

? ? 多態(tài)性意味著對象可以根據(jù)具體的上下文和需求,以不同的方式響應(yīng)同一消息。這提高了系統(tǒng)的靈活性和可擴展性。


? ? 松耦合:面向?qū)ο蟮募軜?gòu)通過封裝、繼承和多態(tài)性,實現(xiàn)了模塊之間的低耦合性。

? ? 這意味著一個模塊的修改不會影響其他模塊的功能和實現(xiàn),使得系統(tǒng)更容易進行修改、擴展和維護。


綜上所述,面向?qū)ο蟮募軜?gòu)是為了提高軟件系統(tǒng)的可維護性、可復用性和擴展性。

它通過模塊化、封裝、繼承、多態(tài)和松耦合等特性,使得系統(tǒng)的設(shè)計更加靈活、可擴展、易于理解和維護。


0718-面相對象(2)的評論 (共 條)

分享到微博請遵守國家法律
岑溪市| 泾川县| 井陉县| 奈曼旗| 英山县| 双江| 竹山县| 梁平县| 武穴市| 博乐市| 泗阳县| 通化县| 讷河市| 改则县| 盐城市| 库尔勒市| 佛坪县| 昭觉县| 宁都县| 六枝特区| 礼泉县| 西青区| 宣威市| 潍坊市| 阳江市| 盘锦市| 湾仔区| 永善县| 茌平县| 浦东新区| 兴海县| 宜城市| 壶关县| 甘孜县| 九龙县| 寿光市| 建水县| 孙吴县| 盐源县| 牙克石市| 双牌县|