成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

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

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

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

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

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

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

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)

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

好了我們這么改一改

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)

好了,你有沒有覺得現在清晰了一點。

好了,現在我們現在還可以改一下

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

好了,現在你可能迷惑了,我們為啥要把 square 函數放在類中?

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

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

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)

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

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

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()

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

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

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

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

你看,我們用 private 變量,來確保外部沒法直接訪問一些敏感數據(實際上 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('你不能去草榴,兄弟,你營養不足') self.__favorite_website=value

你看,我們現在很方便的實現在設置數據值的時候,對其過濾。

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

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

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

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

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

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

很明顯,能。

但是實現的干凈么?個人覺得不干凈。

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

同時,現在開發基本都不是一個人的單打獨斗,你寫的代碼可能會被其余人使用與維護。我們有個前提,要假設使用維護你代碼的人都是傻逼。我們要適當的封裝代碼,優化結構,讓使用者盡可能的少犯錯、

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

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

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

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

標簽: Python 編程
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
一区二区亚洲精品| 嫩草成人www欧美| 国产精品天天看| 日韩一级二级三级| 91精品国产手机| 日韩一区二区在线观看| 91精品国产综合久久久久久久| 中文字幕在线一区免费| 91麻豆精品视频| av在线播放一区二区三区| 成人性生交大片免费看中文网站 | 成人蜜臀av电影| 国产精品99久| 一区二区成人在线视频| 一区二区三区精密机械公司| 亚洲一卡二卡三卡四卡无卡久久 | 亚洲精品欧美激情| 国产精品免费免费| 亚洲天堂久久久久久久| 亚洲视频一区在线| 亚洲一区在线视频| 亚洲妇女屁股眼交7| 青青草精品视频| 国产91丝袜在线播放0| 波多野结衣中文一区| 久久国产精品露脸对白| 国产福利不卡视频| eeuss鲁片一区二区三区在线观看| 亚洲欧美福利一区二区| 制服丝袜中文字幕一区| 精品日本一线二线三线不卡| 国产午夜精品久久久久久久 | 麻豆国产精品官网| 91精品国产综合久久香蕉麻豆| 亚洲人成久久| 99精品国产在热久久婷婷| 亚洲欧美国产精品桃花| 欧美亚洲高清一区| 亚洲欧洲综合| 欧洲精品一区二区三区在线观看| 在线日韩av| 亚洲国产日韩美| 99精品久久久| 欧美三级电影在线看| 日韩欧美国产不卡| 日韩伦理电影网| 麻豆成人综合网| 成人av在线播放网站| 一级精品视频在线观看宜春院| 国产农村妇女精品| 一区二区在线观看不卡| 麻豆91精品视频| 日本不卡的三区四区五区| 国产在线精品一区二区| 91免费版pro下载短视频| 一区二区三区国产在线| 欧美亚洲免费在线一区| 久久精品一区二区三区不卡牛牛| 欧美熟乱第一页| 日韩一区二区免费视频| 亚洲欧美在线另类| 精油按摩中文字幕久久| 欧美激情视频一区二区三区在线播放| 丁香婷婷综合激情五月色| 91在线视频播放地址| 99国内精品| 欧美一级黄色录像| 樱桃视频在线观看一区| 国产精品综合二区| 亚洲国产日韩欧美| 久久黄色影院| 欧美mv日韩mv亚洲| 亚洲已满18点击进入久久| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | a4yy欧美一区二区三区| 在线精品亚洲| 欧美日韩在线观看一区二区 | 精品免费视频.| 午夜一区二区三区视频| 欧美日韩国产亚洲一区| 56国语精品自产拍在线观看| 首页国产欧美日韩丝袜| 亚洲国产精品123| 久久精子c满五个校花| 久久99久久精品欧美| 久久99伊人| 亚洲精品视频自拍| 亚洲免费观看高清完整版在线观看熊 | 国产精品丝袜一区| 国产精品一区二区黑丝| 一本色道久久加勒比精品| 国产精品成人免费在线| 国产suv精品一区二区883| 色嗨嗨av一区二区三区| 亚洲国产精品久久人人爱| 国模精品一区二区三区| 欧美精品一区二区三区很污很色的 | 免费在线看成人av| 亚洲综合丁香| 中文字幕亚洲综合久久菠萝蜜| 亚洲午夜影视影院在线观看| 欧美日韩另类综合| 久久久国产一区二区三区四区小说| 中文字幕一区在线观看视频| 成人精品鲁一区一区二区| 国外精品视频| 国产亚洲欧美中文| 91蝌蚪porny| 精品久久久久久久人人人人传媒| 亚洲黄色性网站| 欧美日韩系列| 欧美精品一区二区三| 国内久久精品视频| 欧美伦理电影网| 午夜久久久影院| 日韩成人精品在线| 久久综合色综合88| 久久婷婷激情| 久久av免费一区| www.视频一区| 一区二区三区精品视频在线| 欧美日韩成人一区| 久久最新视频| 欧美日韩18| 国产精品久久久对白| 91精品在线观看入口| 亚洲va欧美va天堂v国产综合| 欧美日韩一级片在线观看| 国产精品中文字幕欧美| 天天综合色天天综合| 亚洲三级电影全部在线观看高清| 欧美在线亚洲综合一区| 欧美日韩亚洲免费| 亚洲一区一卡| 亚洲私人黄色宅男| 91行情网站电视在线观看高清版| 日韩美女久久久| 欧美肥大bbwbbw高潮| 亚洲大尺度视频在线观看| 亚洲一区二区在| 中文一区二区完整视频在线观看| 国产日韩欧美一区| 亚洲国产精品嫩草影院| 欧美国产欧美综合| 制服丝袜亚洲网站| 久久一二三四| 亚洲小说欧美另类社区| 国产成人精品1024| 日韩不卡手机在线v区| 国产精品视频一二| 日韩欧美国产精品| 欧美精选午夜久久久乱码6080| 欧美精品偷拍| 国产91露脸合集magnet| 国产尤物一区二区在线| 美女免费视频一区| 人人精品人人爱| 亚洲444eee在线观看| 亚洲综合色噜噜狠狠| 国产精品免费网站在线观看| 久久久久久亚洲综合影院红桃| 久久久久久网| 国产三级精品在线不卡| 亚洲电影专区| 欧美视频观看一区| 国产一区观看| 亚洲无线视频| 影音先锋一区| 亚洲香蕉视频| 亚洲手机视频| 在线国产精品一区| 欧美黄色一区| 欧美在线二区| 91麻豆swag| 国产欧美久久久精品影院| 欧美精品一区二区高清在线观看| 国产欧美日韩伦理| 亚洲国产免费看| 国产精品五月天| 国产日产亚洲精品系列| 欧美肥妇毛茸茸| 欧洲生活片亚洲生活在线观看| 国产经典欧美精品| 日韩精品欧美精品| 亚洲激情在线播放| 久久青草国产手机看片福利盒子| 久久国产欧美| 亚洲国产精品一区| 91亚洲男人天堂| 黄色日韩网站视频| 日本视频一区二区三区| 日韩影院在线观看| 亚洲福利一区二区| 亚洲另类春色国产| 久久网站最新地址| 久久亚洲精品小早川怜子| 在线播放国产精品二区一二区四区| 午夜欧美视频| jizzjizzjizz欧美| 成人网在线播放|