国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python超細(xì)膩研究面向?qū)ο笤O(shè)計(jì)

89542767 / 366人閱讀

  面向?qū)ο笤O(shè)計(jì)是一類編程方式,此編程方式的落地式需要使用“類”和“目標(biāo)”來(lái)達(dá)到,因此,面向?qū)ο笤O(shè)計(jì)本身就是對(duì)“類”和“目標(biāo)”的應(yīng)用,今日給大家介紹一下python面向?qū)ο笤O(shè)計(jì)開(kāi)發(fā)設(shè)計(jì)及本質(zhì)特征,感興趣的小伙伴一起了解一下吧


  序言


  面向?qū)ο笤O(shè)計(jì)對(duì)新手而言不難理解但無(wú)法運(yùn)用,盡管我們給大家匯總過(guò)面向?qū)ο髴?zhàn)略部署方式(定義類、創(chuàng)建對(duì)象、給目標(biāo)發(fā)信息),可是看似簡(jiǎn)單其實(shí)不簡(jiǎn)單。大量程序編寫訓(xùn)練與閱讀高質(zhì)量的編碼有可能是這一階段最能夠幫到大家的兩件事。下面我們還是用經(jīng)典實(shí)例來(lái)剖析面向?qū)ο笤O(shè)計(jì)的基礎(chǔ)知識(shí),并且也通過(guò)這個(gè)實(shí)例給大家講解怎樣利用以前學(xué)習(xí)過(guò)的Python專業(yè)知識(shí)。


  撲克牌游戲。


  表明:簡(jiǎn)潔明了考慮,我們自己的撲克牌僅有52撲克牌(并沒(méi)有兩王),手機(jī)游戲需要把52撲克牌發(fā)至4個(gè)游戲玩家手里,每個(gè)游戲玩家手里有13撲克牌,依照黑桃皇后、桃心、金邊麥冬、格子順序和等級(jí)從小到大排列,暫不完成別的的功效。


  應(yīng)用面向?qū)ο笤O(shè)計(jì)方式,首先要從難題的需要中尋找目標(biāo)并抽像出相對(duì)應(yīng)的類,除此之外還需要尋找對(duì)象的屬性與行為。自然,這件事并不是很艱難,我們要從市場(chǎng)需求的談話中找到動(dòng)詞和名詞,專有名詞一般便是目標(biāo)或是對(duì)象的屬性,而形容詞一般是對(duì)象個(gè)人行為。撲克牌游戲中最少應(yīng)當(dāng)有三種目標(biāo),各是牌、撲克牌和游戲玩家,牌、撲克牌、游戲玩家3個(gè)類并不是獨(dú)立的。類及類的關(guān)系能夠粗略地的分為is-a關(guān)系(傳承)、has-a關(guān)系(關(guān)系)和use-a關(guān)系(依靠)。顯然撲克牌胡牌是has-a關(guān)系,因?yàn)橐桓睋淇擞校╤as-a)52撲克牌;游戲玩家胡牌中間不但有關(guān)聯(lián)性也有依存關(guān)系,因?yàn)橛螒蛲婕沂掷镉校╤as-a)牌并且游戲玩家用了(use-a)牌。


  牌的特性不言而喻,有顏色和等級(jí)。我們可以通過(guò)0到3的四個(gè)數(shù)字來(lái)意味著4種不一樣花色,但這樣的代碼可讀性會(huì)很糟糕,只要我們并不了解黑桃皇后、桃心、金邊麥冬、格子跟0到3的數(shù)的相互關(guān)系。當(dāng)一個(gè)自變量的選值僅有比較有限好幾個(gè)選擇項(xiàng),大家可以用枚舉類型。與C、Java等語(yǔ)言表達(dá)不一樣的是,Python里沒(méi)有申明枚舉類型的關(guān)鍵詞,可是能通過(guò)傳承enum控制模塊Enum類來(lái)建立枚舉類型,編碼具體如下。


  from enum import Enum
  class Suite(Enum):
  """花色(枚舉)"""
  SPADE,HEART,CLUB,DIAMOND=range(4)


  依據(jù)上邊的編碼能夠得知,界定枚舉類型本身就是界定符號(hào)常量,如SPADE、HEART等。每個(gè)符號(hào)常量都是有與其相對(duì)應(yīng)的值,談道黑桃皇后就不用再數(shù)據(jù)0,而是以Suite.SPADE;同樣,表明格子可以不數(shù)據(jù)3,而是以Suite.DIAMOND。留意,應(yīng)用符號(hào)常量一定是好于應(yīng)用字面上變量定義的,因?yàn)槟軌蛄私庥⒄Z(yǔ)就能明白符號(hào)常量的內(nèi)涵,編碼的易讀性會(huì)提高許多。Python里的枚舉類型是可迭代種類,簡(jiǎn)單來(lái)說(shuō)就是能將枚舉類型放在for-in循環(huán)中,先后取下每個(gè)符號(hào)常量及其相對(duì)應(yīng)的值,具體如下。


  class Card:
  """牌"""
  def __init__(self,suite,face):
  self.suite=suite
  self.face=face
  def __repr__(self):
  suites='????'
  faces=['','A','2','3','4','5','6','7','8','9','10','J','Q','K']
  #根據(jù)牌的花色和點(diǎn)數(shù)取到對(duì)應(yīng)的字符
  return f'{suites[self.suite.value]}{faces[self.face]}'


  實(shí)施上邊的編碼會(huì)在player.arrange()那邊發(fā)現(xiàn)異常,因?yàn)镻layer的arrange方法用了目錄的sort對(duì)游戲玩家手里的牌進(jìn)行篩選,排列必須較為2個(gè)Card對(duì)象尺寸,而<操作符又無(wú)法直接應(yīng)用于Card類型,因此出現(xiàn)了TypeError出現(xiàn)異常,出現(xiàn)異常信息為:'<'notsupportedbetweeninstancesof'Card'and'Card'。


  card1=Card(Suite.SPADE,5)
  card2=Card(Suite.HEART,13)
  print(card1,card2)#?5?K


  為了能解決這些問(wèn)題,我們能對(duì)Card類的編碼稍加改動(dòng),促使2個(gè)Card目標(biāo)也可以用<開(kāi)展大小的小較為。這兒使用技術(shù)性叫函數(shù)重載,Python時(shí)要完成對(duì)<操作符的輕載,必須在類中加入1個(gè)名叫__lt__的魔術(shù)師方式。顯然,魔術(shù)師方式__lt__中的lt是英文單詞“l(fā)essthan”的簡(jiǎn)稱,依此類推,魔術(shù)師方式__gt__相匹配>操作符,魔術(shù)師方式__le__相匹配<=操作符,__ge__相匹配>=操作符,__eq__相匹配==操作符,__ne__相匹配!=操作符。


  修訂后的Card類編碼具體如下。


  import random
  class Poker:
  """撲克"""
  def __init__(self):
  #通過(guò)列表的生成式語(yǔ)法創(chuàng)建一個(gè)裝52張牌的列表
  self.cards=[Card(suite,face)for suite in Suite
  for face in range(1,14)]
  #current屬性表示發(fā)牌的位置
  self.current=0
  def shuffle(self):
  """洗牌"""
  self.current=0
  #通過(guò)random模塊的shuffle函數(shù)實(shí)現(xiàn)列表的隨機(jī)亂序
  random.shuffle(self.cards)
  def deal(self):
  """發(fā)牌"""
  card=self.cards[self.current]
  self.current+=1
  return card
  property
  def has_next(self):
  """還有沒(méi)有牌可以發(fā)"""
  return self.current<len(self.cards)


  薪資發(fā)放系統(tǒng)軟件。


  規(guī)定:某企業(yè)有三大類的職工,各是業(yè)務(wù)經(jīng)理、程序猿和銷售人員。必須制作一個(gè)薪資發(fā)放系統(tǒng)軟件,依據(jù)所提供的員工檔案進(jìn)行計(jì)算職工的月工資。在其中,業(yè)務(wù)經(jīng)理的月工資是固定不動(dòng)15000元;程序猿按上班時(shí)間(以鐘頭為基準(zhǔn))付款月工資,一小時(shí)200元;銷售人員的月工資由1800元基本工資再加上銷售總額5%的抽成兩個(gè)部分組成。


  poker=Poker()
  poker.shuffle()
  print(poker.cards)


  依據(jù)對(duì)于該市場(chǎng)需求的剖析,能夠得知業(yè)務(wù)經(jīng)理、程序猿、銷售人員全是職工,有共同的特性與行為,那我們可以直接制作一個(gè)名叫Employee的成員變量,然后通過(guò)傳承的形式從這一成員變量派長(zhǎng)出業(yè)務(wù)經(jīng)理、程序猿和銷售人員3個(gè)派生類。顯然,后續(xù)編碼不容易建立Employee類對(duì)象,只要我們更需要的是實(shí)際的職工目標(biāo),并且這個(gè)類能夠設(shè)計(jì)為專門用來(lái)傳承的內(nèi)部類。Python里沒(méi)有界定內(nèi)部類的關(guān)鍵詞,可是能通過(guò)abc控制模塊中名叫ABCMeta的元類來(lái)衡量?jī)?nèi)部類。有關(guān)元類專業(yè)知識(shí),后邊的課堂中會(huì)有專業(yè)的解讀,這兒無(wú)需太過(guò)糾結(jié)這一概念,記牢使用方法就可以。


  class Player:
  """玩家"""
  def __init__(self,name):
  self.name=name
  self.cards=[]
  def get_one(self,card):
  """摸牌"""
  self.cards.append(card)
  def arrange(self):
  self.cards.sort()


  在后面的職工類中,有個(gè)名叫g(shù)et_salary的方式用以結(jié)款月工資,但由于都還沒(méi)斷定什么類型職工,因此結(jié)款月工資雖是職工的公眾個(gè)人行為但這卻不能夠完成。針對(duì)暫且不能完成的辦法,大家能使用abstractmethod裝飾器把它申明為抽象類,所說(shuō)抽象類便是僅有申明無(wú)法實(shí)現(xiàn)的辦法,申明用這種方法是為了給派生類去重新寫過(guò)用這種方法。接下來(lái)代碼展示了怎樣從職工類派長(zhǎng)出業(yè)務(wù)經(jīng)理、程序猿、銷售人員這幾個(gè)派生類及其派生類怎樣重新寫過(guò)成員變量的抽象類。


  class Manager(Employee):
  """部門經(jīng)理"""
  def get_salary(self):
  return 15000.0
  class Programmer(Employee):
  """程序員"""
  def __init__(self,name,working_hour=0):
  super().__init__(name)
  self.working_hour=working_hour
  def get_salary(self):
  return 200*self.working_hour
  class Salesman(Employee):
  """銷售員"""
  def __init__(self,name,sales=0):
  super().__init__(name)
  self.sales=sales
  def get_salary(self):
  return 1800+self.sales*0.05


  上邊的Manager、Programmer、Salesman3個(gè)類都傳承自Employee,3個(gè)類都各自重新寫過(guò)了get_salary方式。重新寫過(guò)便是派生類對(duì)成員變量現(xiàn)有的方式再次作出完成。想必大家早已察覺(jué)到了,3個(gè)派生類中的get_salary不盡相同,因此用這種方法在程序執(zhí)行的時(shí)候會(huì)造成多態(tài)性個(gè)人行為,多態(tài)性簡(jiǎn)單來(lái)說(shuō)就是啟用同樣的方式,不同類型的派生類目標(biāo)做不同類型的事兒。


  poker=Poker()
  poker.shuffle()
  players=[Player('東邪'),Player('西毒'),Player('南帝'),Player('北丐')]
  for _ in range(13):
  for player in players:
  player.get_one(poker.deal())
  for player in players:
  player.arrange()
  print(f'{player.name}:',end='')
  print(player.cards)


  我們可以通過(guò)下邊的編碼來(lái)實(shí)現(xiàn)這一薪資發(fā)放系統(tǒng)軟件,因?yàn)槌绦蛟澈弯N售人員必須各自上傳當(dāng)月工作時(shí)間和銷售總額,因此在下邊的編碼中用了Python內(nèi)嵌的isinstance函數(shù)來(lái)判斷職工對(duì)象種類。我們之前講過(guò)的type函數(shù)也能識(shí)別對(duì)象種類,但是isinstance函數(shù)更加強(qiáng)大,因?yàn)樗梢耘袛喑鲆粋€(gè)目標(biāo)是不是某個(gè)傳承結(jié)構(gòu)下的子類型,你可以簡(jiǎn)答的理解為type函數(shù)是對(duì)對(duì)象類型的精準(zhǔn)匹配,而isinstance函數(shù)是對(duì)對(duì)象類型的模糊匹配。


  from abc import ABCMeta,abstractmethod
  class Employee(metaclass=ABCMeta):
  """員工"""
  def __init__(self,name):
  self.name=name
  abstractmethod
  def get_salary(self):
  """結(jié)算月薪"""
  pass
  總結(jié)
  class Card:
  """牌"""
  def __init__(self,suite,face):
  self.suite=suite
  self.face=face
  def __repr__(self):
  suites='????'
  faces=['','A','2','3','4','5','6','7','8','9','10','J','Q','K']
  #根據(jù)牌的花色和點(diǎn)數(shù)取到對(duì)應(yīng)的字符
  return f'{suites[self.suite.value]}{faces[self.face]}'
  def __lt__(self,other):
  #花色相同比較點(diǎn)數(shù)的大小
  if self.suite==other.suite:
  return self.face<other.face
  #花色不同比較花色對(duì)應(yīng)的值
  return self.suite.value<other.suite.value


  面向?qū)ο蟮木幊趟枷敕浅5暮茫卜先祟惖恼K季S習(xí)慣,但是要想靈活運(yùn)用面向?qū)ο缶幊讨械某橄蟆⒎庋b、繼承、多態(tài)需要長(zhǎng)時(shí)間的積累和沉淀,這件事情無(wú)法一蹴而就,屬于“路漫漫其修遠(yuǎn)兮,吾將上下而求索”的東西。


  上述文章就給大家介紹完畢,希望可以給大家?guī)?lái)幫助。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/128848.html

相關(guān)文章

  • [零基礎(chǔ)學(xué)python]關(guān)于類的初步認(rèn)識(shí)

    摘要:反對(duì)者在某些領(lǐng)域?qū)Υ擞枰苑裾J(rèn)。下面再引用一段來(lái)自維基百科中關(guān)于的歷史。類的更嚴(yán)格的定義是由某種特定的元數(shù)據(jù)所組成的內(nèi)聚的包。類還可以有運(yùn)行時(shí)表示形式元對(duì)象,它為操作與類相關(guān)的元數(shù)據(jù)提供了運(yùn)行時(shí)支持。 在開(kāi)始部分,請(qǐng)看官非常非常耐心地閱讀下面幾個(gè)枯燥的術(shù)語(yǔ)解釋,本來(lái)這不符合本教程的風(fēng)格,但是,請(qǐng)看官諒解,因?yàn)榱形粚?lái)一定要閱讀枯燥的東西的。這些枯燥的屬于解釋,均來(lái)自維基百科。 1、問(wèn)題...

    王巖威 評(píng)論0 收藏0
  • 拼多多的搜索的參數(shù)anti_content怎么破

    摘要:這里就可以看到我們需要找的參數(shù)了,但是這里已經(jīng)生成了,我們可以直接查看右邊的調(diào)用棧經(jīng)過(guò)多次查看,可以很容易就發(fā)現(xiàn)這個(gè)地方有點(diǎn)東西,立即下斷點(diǎn)這時(shí)我們可以先去掉斷點(diǎn),然后刷看查看,獲取不斷點(diǎn)下一個(gè)斷點(diǎn)直到運(yùn)行結(jié)束再滑動(dòng)到下一頁(yè)即可。 今天繼續(xù)帶來(lái)破解拼多多的 anti_content 參數(shù)破解,代碼已經(jīng)放在github上:https://github.com/SergioJune...(...

    everfight 評(píng)論0 收藏0
  • 拼多多的搜索的參數(shù)anti_content怎么破

    摘要:這里就可以看到我們需要找的參數(shù)了,但是這里已經(jīng)生成了,我們可以直接查看右邊的調(diào)用棧經(jīng)過(guò)多次查看,可以很容易就發(fā)現(xiàn)這個(gè)地方有點(diǎn)東西,立即下斷點(diǎn)這時(shí)我們可以先去掉斷點(diǎn),然后刷看查看,獲取不斷點(diǎn)下一個(gè)斷點(diǎn)直到運(yùn)行結(jié)束再滑動(dòng)到下一頁(yè)即可。 今天繼續(xù)帶來(lái)破解拼多多的 anti_content 參數(shù)破解,代碼已經(jīng)放在github上:https://github.com/SergioJune...(...

    tulayang 評(píng)論0 收藏0
  • 學(xué)習(xí)Python:做數(shù)據(jù)科學(xué)還是網(wǎng)站開(kāi)發(fā)?

    摘要:屬于前一種,而且日益被用于數(shù)學(xué)計(jì)算機(jī)器學(xué)習(xí)和多種數(shù)據(jù)科學(xué)應(yīng)用。近來(lái),由于擁有多個(gè)針對(duì)機(jī)器學(xué)習(xí)自然語(yǔ)言處理數(shù)據(jù)視覺(jué)化數(shù)據(jù)探索數(shù)據(jù)分析和數(shù)據(jù)挖掘的插件,豐富的數(shù)據(jù)科學(xué)生態(tài)體系得到了較大的發(fā)展,甚至有將數(shù)據(jù)科學(xué)社區(qū)化的趨勢(shì)。 譯者注:本文的英文原文地址是:Python for Data Science vs Python for Web Development,發(fā)布時(shí)間是10月29日。譯者一...

    neu 評(píng)論0 收藏0
  • 小型的編程項(xiàng)目有哪些值得推薦?這本神書寫了 22 個(gè),個(gè)個(gè)了不得

    摘要:電子表格使用語(yǔ)言電子表格是辦公軟件的必備,我們最熟知的是微軟的。文中用框架來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的電子表格,所用代碼僅行。 showImg(https://segmentfault.com/img/remote/1460000019770011); 本文原創(chuàng)并首發(fā)于公眾號(hào)【Python貓】,未經(jīng)授權(quán),請(qǐng)勿轉(zhuǎn)載。 原文地址:https://mp.weixin.qq.com/s/Ob... 今天,...

    haitiancoder 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<