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

資訊專欄INFORMATION COLUMN

Python超細膩研究面向對象設計

89542767 / 371人閱讀

  面向對象設計是一類編程方式,此編程方式的落地式需要使用“類”和“目標”來達到,因此,面向對象設計本身就是對“類”和“目標”的應用,今日給大家介紹一下python面向對象設計開發設計及本質特征,感興趣的小伙伴一起了解一下吧


  序言


  面向對象設計對新手而言不難理解但無法運用,盡管我們給大家匯總過面向對象戰略部署方式(定義類、創建對象、給目標發信息),可是看似簡單其實不簡單。大量程序編寫訓練與閱讀高質量的編碼有可能是這一階段最能夠幫到大家的兩件事。下面我們還是用經典實例來剖析面向對象設計的基礎知識,并且也通過這個實例給大家講解怎樣利用以前學習過的Python專業知識。


  撲克牌游戲。


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


  應用面向對象設計方式,首先要從難題的需要中尋找目標并抽像出相對應的類,除此之外還需要尋找對象的屬性與行為。自然,這件事并不是很艱難,我們要從市場需求的談話中找到動詞和名詞,專有名詞一般便是目標或是對象的屬性,而形容詞一般是對象個人行為。撲克牌游戲中最少應當有三種目標,各是牌、撲克牌和游戲玩家,牌、撲克牌、游戲玩家3個類并不是獨立的。類及類的關系能夠粗略地的分為is-a關系(傳承)、has-a關系(關系)和use-a關系(依靠)。顯然撲克牌胡牌是has-a關系,因為一副撲克有(has-a)52撲克牌;游戲玩家胡牌中間不但有關聯性也有依存關系,因為游戲玩家手里有(has-a)牌并且游戲玩家用了(use-a)牌。


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


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


  依據上邊的編碼能夠得知,界定枚舉類型本身就是界定符號常量,如SPADE、HEART等。每個符號常量都是有與其相對應的值,談道黑桃皇后就不用再數據0,而是以Suite.SPADE;同樣,表明格子可以不數據3,而是以Suite.DIAMOND。留意,應用符號常量一定是好于應用字面上變量定義的,因為能夠了解英語就能明白符號常量的內涵,編碼的易讀性會提高許多。Python里的枚舉類型是可迭代種類,簡單來說就是能將枚舉類型放在for-in循環中,先后取下每個符號常量及其相對應的值,具體如下。


  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']
  #根據牌的花色和點數取到對應的字符
  return f'{suites[self.suite.value]}{faces[self.face]}'


  實施上邊的編碼會在player.arrange()那邊發現異常,因為Player的arrange方法用了目錄的sort對游戲玩家手里的牌進行篩選,排列必須較為2個Card對象尺寸,而<操作符又無法直接應用于Card類型,因此出現了TypeError出現異常,出現異常信息為:'<'notsupportedbetweeninstancesof'Card'and'Card'。


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


  為了能解決這些問題,我們能對Card類的編碼稍加改動,促使2個Card目標也可以用<開展大小的小較為。這兒使用技術性叫函數重載,Python時要完成對<操作符的輕載,必須在類中加入1個名叫__lt__的魔術師方式。顯然,魔術師方式__lt__中的lt是英文單詞“lessthan”的簡稱,依此類推,魔術師方式__gt__相匹配>操作符,魔術師方式__le__相匹配<=操作符,__ge__相匹配>=操作符,__eq__相匹配==操作符,__ne__相匹配!=操作符。


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


  import random
  class Poker:
  """撲克"""
  def __init__(self):
  #通過列表的生成式語法創建一個裝52張牌的列表
  self.cards=[Card(suite,face)for suite in Suite
  for face in range(1,14)]
  #current屬性表示發牌的位置
  self.current=0
  def shuffle(self):
  """洗牌"""
  self.current=0
  #通過random模塊的shuffle函數實現列表的隨機亂序
  random.shuffle(self.cards)
  def deal(self):
  """發牌"""
  card=self.cards[self.current]
  self.current+=1
  return card
  property
  def has_next(self):
  """還有沒有牌可以發"""
  return self.current<len(self.cards)


  薪資發放系統軟件。


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


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


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


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


  在后面的職工類中,有個名叫get_salary的方式用以結款月工資,但由于都還沒斷定什么類型職工,因此結款月工資雖是職工的公眾個人行為但這卻不能夠完成。針對暫且不能完成的辦法,大家能使用abstractmethod裝飾器把它申明為抽象類,所說抽象類便是僅有申明無法實現的辦法,申明用這種方法是為了給派生類去重新寫過用這種方法。接下來代碼展示了怎樣從職工類派長出業務經理、程序猿、銷售人員這幾個派生類及其派生類怎樣重新寫過成員變量的抽象類。


  class Manager(Employee):
  """部門經理"""
  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個類都傳承自Employee,3個類都各自重新寫過了get_salary方式。重新寫過便是派生類對成員變量現有的方式再次作出完成。想必大家早已察覺到了,3個派生類中的get_salary不盡相同,因此用這種方法在程序執行的時候會造成多態性個人行為,多態性簡單來說就是啟用同樣的方式,不同類型的派生類目標做不同類型的事兒。


  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)


  我們可以通過下邊的編碼來實現這一薪資發放系統軟件,因為程序猿和銷售人員必須各自上傳當月工作時間和銷售總額,因此在下邊的編碼中用了Python內嵌的isinstance函數來判斷職工對象種類。我們之前講過的type函數也能識別對象種類,但是isinstance函數更加強大,因為它可以判斷出一個目標是不是某個傳承結構下的子類型,你可以簡答的理解為type函數是對對象類型的精準匹配,而isinstance函數是對對象類型的模糊匹配。


  from abc import ABCMeta,abstractmethod
  class Employee(metaclass=ABCMeta):
  """員工"""
  def __init__(self,name):
  self.name=name
  abstractmethod
  def get_salary(self):
  """結算月薪"""
  pass
  總結
  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']
  #根據牌的花色和點數取到對應的字符
  return f'{suites[self.suite.value]}{faces[self.face]}'
  def __lt__(self,other):
  #花色相同比較點數的大小
  if self.suite==other.suite:
  return self.face<other.face
  #花色不同比較花色對應的值
  return self.suite.value<other.suite.value


  面向對象的編程思想非常的好,也符合人類的正常思維習慣,但是要想靈活運用面向對象編程中的抽象、封裝、繼承、多態需要長時間的積累和沉淀,這件事情無法一蹴而就,屬于“路漫漫其修遠兮,吾將上下而求索”的東西。


  上述文章就給大家介紹完畢,希望可以給大家帶來幫助。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/128848.html

相關文章

  • [零基礎學python]關于類的初步認識

    摘要:反對者在某些領域對此予以否認。下面再引用一段來自維基百科中關于的歷史。類的更嚴格的定義是由某種特定的元數據所組成的內聚的包。類還可以有運行時表示形式元對象,它為操作與類相關的元數據提供了運行時支持。 在開始部分,請看官非常非常耐心地閱讀下面幾個枯燥的術語解釋,本來這不符合本教程的風格,但是,請看官諒解,因為列位將來一定要閱讀枯燥的東西的。這些枯燥的屬于解釋,均來自維基百科。 1、問題...

    王巖威 評論0 收藏0
  • 拼多多的搜索的參數anti_content怎么破

    摘要:這里就可以看到我們需要找的參數了,但是這里已經生成了,我們可以直接查看右邊的調用棧經過多次查看,可以很容易就發現這個地方有點東西,立即下斷點這時我們可以先去掉斷點,然后刷看查看,獲取不斷點下一個斷點直到運行結束再滑動到下一頁即可。 今天繼續帶來破解拼多多的 anti_content 參數破解,代碼已經放在github上:https://github.com/SergioJune...(...

    everfight 評論0 收藏0
  • 拼多多的搜索的參數anti_content怎么破

    摘要:這里就可以看到我們需要找的參數了,但是這里已經生成了,我們可以直接查看右邊的調用棧經過多次查看,可以很容易就發現這個地方有點東西,立即下斷點這時我們可以先去掉斷點,然后刷看查看,獲取不斷點下一個斷點直到運行結束再滑動到下一頁即可。 今天繼續帶來破解拼多多的 anti_content 參數破解,代碼已經放在github上:https://github.com/SergioJune...(...

    tulayang 評論0 收藏0
  • 學習Python:做數據科學還是網站開發?

    摘要:屬于前一種,而且日益被用于數學計算機器學習和多種數據科學應用。近來,由于擁有多個針對機器學習自然語言處理數據視覺化數據探索數據分析和數據挖掘的插件,豐富的數據科學生態體系得到了較大的發展,甚至有將數據科學社區化的趨勢。 譯者注:本文的英文原文地址是:Python for Data Science vs Python for Web Development,發布時間是10月29日。譯者一...

    neu 評論0 收藏0
  • 小型的編程項目有哪些值得推薦?這本神書寫了 22 個,個個了不得

    摘要:電子表格使用語言電子表格是辦公軟件的必備,我們最熟知的是微軟的。文中用框架來實現一個簡單的電子表格,所用代碼僅行。 showImg(https://segmentfault.com/img/remote/1460000019770011); 本文原創并首發于公眾號【Python貓】,未經授權,請勿轉載。 原文地址:https://mp.weixin.qq.com/s/Ob... 今天,...

    haitiancoder 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<