亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Python基于class()實現(xiàn)面向對象原理詳解

瀏覽:44日期:2022-08-01 09:34:02

首先,類是一個集合,包含了數(shù)據(jù),操作描述的一個抽象集合

你可以首先只把類當做一個容器來使用

class Cycle: def __init__(self,r): self.pi=3.14 self.r=ra=Cycle(4)b=Cycle(7)

你看,我們定義了一個 Cycle 類,我們現(xiàn)在只是將它當做一個數(shù)據(jù)集合來用,我們利用其實例之間彼此數(shù)據(jù)隔離的特性來保證具體的實例數(shù)據(jù)彼此不污染。好了你現(xiàn)在想問,為什么我們要用數(shù)據(jù)集合來放數(shù)據(jù)

好了,我們來看看沒有類之前我們會怎么樣,假設我們現(xiàn)在要計算圓的面積

def square(r,pi): return pi * (r**2)PI=3.14a_r=4a_square=square(a_r,PI)b_r=7b_square=square(b_r,PI)

看起來沒有問題,好了,現(xiàn)在問題來了,假如,你現(xiàn)在要計算很多圓的面積,那么你是不是發(fā)現(xiàn),不斷的用變量命來隔離數(shù)據(jù)方式變得越來越臟了。而且你發(fā)現(xiàn)是不是有很多冗余的代碼

好了我們這么改一改

class Cycle: def __init__(self,r): self.pi=3.14 self.r=rdef square(value): if not isinstance(value,Cycle): raise ValueError('value muse be Cycle instace') value.square=value.pi * (value.r**2)a=Cycle(4)b=Cycle(7)square(a)square(b)

好了,你有沒有覺得現(xiàn)在清晰了一點。

好了,現(xiàn)在我們現(xiàn)在還可以改一下

class Cycle: def __init__(self,r): self.pi=3.14 self.r=r def square(self,value): return self.pi * (self.r**2)

好了,現(xiàn)在你可能迷惑了,我們?yōu)樯兑?square 函數(shù)放在類中?

好了,我現(xiàn)在要計算長方形,原型,梯形各種各樣二維幾何圖形的面積,這樣該怎么寫???

你想了想我們之前說的將類作為數(shù)據(jù)容器,你想了想寫了如下的代碼

class Rectangle: def __init__(self,length,height): self.length=length self.height=heightclass Cycle: def __init__(self,r): self.pi=3.14 self.r=rdef rec_square(value): if not isinstance(value,Rectangle): raise ValueError('value muse be Rectangle instace') value.square=value.length * value.heightdef cycle_square(value): if not isinstance(value,Cycle): raise ValueError('value muse be Cycle instace') value.square=value.pi * (value.r**2)

你想一想,這樣是不是感覺如果計算需求越來越多,代碼是不是還是會越來越臟?

如果我們將函數(shù)放在類里,并且用繼承的特性,我們可以寫出這樣的代碼

class Geometry: def get_square(self): raise NotImplementedErrorclass Rectangle(Geometry): def __init__(self,length,height): self.length=length self.height=height def get_square(self): return self.length*self.heightclass Cycle(Geometry): def __init__(self,r): self.pi=3.14 self.r=r def get_square(self): return self.pi * (self.r**2)def square(value): if not isinstance(value,Geometry): raise ValueError('value muse be Geometry instace') value.square=value.get_square()

你看,我們現(xiàn)在只需要給用戶暴露一個統(tǒng)一的接口,用戶(用戶也以是我們自己)不需要關心怎么樣選擇正確的函數(shù),他只需要調用統(tǒng)一的 square 函數(shù),就可以獲取到具體的面積,是不是輕松很多了??

所以,類,它是對數(shù)據(jù),操作的一種封裝,這個封裝的意義在于我們可以去更好的優(yōu)化代碼結構。

好了再舉一個例子,我們可以用類來控制訪問權限

class People: def __init__(self,website): self.__favorite_website='1024.com' def bad_or_not(self): return self.__favorite_website=='1024.com'

你看,我們用 private 變量,來確保外部沒法直接訪問一些敏感數(shù)據(jù)(實際上 Python 里 private 并不嚴格,hook 一下還是可以訪問的)

好,在舉一個例子

class People: def __init__(self,website): self.__favorite_website='1024.com' def bad_or_not(self): return self.__favorite_website=='1024.com' @property def favorite_website(self): return self.__favorite_website @favorite_website.setter def favorite_website(self,value): if value=='1024.com': raise ValueError('你不能去草榴,兄弟,你營養(yǎng)不足') self.__favorite_website=value

你看,我們現(xiàn)在很方便的實現(xiàn)在設置數(shù)據(jù)值的時候,對其過濾。

撤了這么多,回到你的問題

首先A君說的沒毛病,但我想知道僅僅使用函數(shù)錘子,螺絲刀來完成一個項目比使用Class工廠+函數(shù)錘子來完成一個項目的效率會更低么?

理由是什么?大神在什么時候會考慮使用Class來提高代碼的“執(zhí)行效率”和代碼的“可讀性”。回歸實際情況,我很多時候都是調用同一個函數(shù)/方法去輸出某個結果。

至今還想不出為什么調用Class會更方便?(PS:本人大菜鳥,寫了上千行代碼了,但仍然搞不懂什么情況下需要用到Class類。也曾嘗試在自己的代碼中強行加入Class輸出結果

但感覺不靈活,而且要寫的代碼明顯多了也不便于理解。求大神舉例,碾壓我的無知!)。C君說大型項目不使用Class調用對象會累死,到底這個“累死”體現(xiàn)在哪里?

首先一個問題,我整個答案里所寫的這些代碼,不用面向對象這一套能不能實現(xiàn)?

很明顯,能。

但是實現(xiàn)的干凈么?個人覺得不干凈。

項目規(guī)格上去后,我們如果按照傳統(tǒng)的方式進行開發(fā),務必要多重檢查,確保自己不會手抖調用了錯誤的東西。而 OOP 這一套思想,其實就是通過利用合適的代碼結構和封裝,某種程度上來講是減少我們犯錯的可能。

同時,現(xiàn)在開發(fā)基本都不是一個人的單打獨斗,你寫的代碼可能會被其余人使用與維護。我們有個前提,要假設使用維護你代碼的人都是傻逼。我們要適當?shù)姆庋b代碼,優(yōu)化結構,讓使用者盡可能的少犯錯、

所以最后,無論是各個語言的變量命名規(guī)則也好,還是 OOP 這一套范式也好。其本質是在自由度與可讀性可維護性之間的一種相對較優(yōu)的妥協(xié),這種妥協(xié)根本的目的就在于通過規(guī)范化的操作與封裝,減少團隊開發(fā)維護的成本,優(yōu)化開發(fā)體驗。

另外,關于開發(fā)這一套還有個老生常談的問題過度封裝。我個人的觀點是在你知道什么是 過度封裝 之前,你沒必要考慮這個問題,按照教科書和開源代碼里的結構,去不斷封裝優(yōu)化你的代碼。

面向對象 更容易使用 ,缺點就是 換一個開發(fā)人,難維護,很難理解前面人的思維,出了錯不好找位置

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 狠狠色丁香婷婷久久综合不卡 | 国产精品亚洲综合 | 欧美a级黄色大片 | 国产综合在线视频 | 久久香蕉精品成人 | 丁香婷婷久久大综合 | 国产成人亚洲精品 | 九九精品99久久久香蕉 | 欧美一区二区三区免费观看视频 | 日韩另类 | 色网站在线免费观看 | 在线播放国产麻豆 | 久久精品国产99久久3d动漫 | 特大巨黑人吊性xxx视频 | 免费一级欧美在线观看视频片 | 手机看片久久国产免费不卡 | 看黄色.com| 欧美一区二区三区精品国产 | 玖玖99| 黄色录像在线免费观看 | 国产一区在线视频观看 | 亚洲国产精品日韩一线满 | 色综合综合色综合色综合 | 一级黄色网片 | 免费国产好深啊好涨好硬视频 | 久久精品大片 | 国内自拍一二三四2021 | 国产护士恋夜各种姿势视频 | 国产xxxxx片免费观看 | 在线观看三级视频 | 91在线品视觉盛宴免费 | 青青操精品 | 成年美女黄的视频网站 | 国产v精品成人免费视频400条 | 中国免费xxxx免费视频 | 欧美黄色片在线播放 | 亚洲爆操 | 婷婷综合五月 | 国产高清网站 | 亚洲成人网在线播放 | 久久国产自偷自免费一区100 |