日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

python中扑克牌类设计_Python类的基础设计、使用

發(fā)布時間:2024/9/19 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中扑克牌类设计_Python类的基础设计、使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

類是事物功能和屬性的抽象,對象是類的實(shí)例化。就像人人都知道小汽車可以干什么什么的,但光想小汽車如何好是沒有用的,得開車或坐才能感受到小汽車的好。人腦里的小汽車是抽象的,即類,而坐上的某輛車是小汽車的實(shí)例化,即對象。所以,如果一門語言提供了、支持面向?qū)ο缶幊痰臋C(jī)制,那么首先得先設(shè)計程序所需要的類,然后再在程序里將這些類實(shí)例化產(chǎn)生對象,通過對象這個程序元素(和變量、函數(shù)等起著相同的作用,構(gòu)成程序的基本元素),所以類的設(shè)計是面向?qū)ο缶幊淌欠裼行А⒑侠怼⒊晒Φ年P(guān)鍵。

類總的來說是專有數(shù)據(jù)用專用方法處理,即數(shù)據(jù)和處理數(shù)據(jù)方法的集合,故類的里有數(shù)據(jù)(屬性)和函數(shù)(功能),且類里的數(shù)據(jù)必須用類里的方法來操作處理。

類里的這些函數(shù)也有時又稱方法、成員函數(shù),如果方法或函數(shù)作用于類本身稱之為類方法,如果方法作用于由類產(chǎn)生出的實(shí)例對象上,這些方法稱之為實(shí)例對象的方法。類里的數(shù)據(jù)稱為屬性(類屬性和實(shí)例對象屬性)、成員變量。

類不能無源而生,需有自己的父類,而object這個類是Python下的根類(base class),也就是說用戶自己的類可以繼承object 這個類作為自己(父)類的起點(diǎn),類的父類需要用圓括號括起來放在類名字的后邊。

定義類

基于上邊講述,定義一個常規(guī)的類格式如下:

class?類名字(父類序列):
????類的成員變量?=?初值
????def?__init__(self,?形參序列):
????????self.實(shí)例對象的成員變量名?=?初值
????????其他語句

????def?其他實(shí)例對象函數(shù)名(self,形參序列):
????????語句

????@classmethond
????def?類的成員函數(shù)名(cls,形參序列):
????????cls.類的成員變量名?=?初值
????????語句

????@staticmethond
????def?函數(shù)名(形參序列):
????????語句

類的語法格式里出現(xiàn)了一些奇奇怪怪的符號,下面一一解釋一下。class和定義函數(shù)的def一樣是Python里的關(guān)鍵字,用于定義一個類的標(biāo)識符。

位于class下和_ _init_ _函數(shù)間聲明的變量是類的變量,可被類或類的對象共有。

__init__可以成為類的實(shí)例對象的構(gòu)造函數(shù),每次通過類創(chuàng)建一個該類的對象是調(diào)用此函數(shù),所以其下的以sefl.前綴的變量是每個創(chuàng)建好了的實(shí)例(化)對象的所獨(dú)有的。換句話說,有多少個類的對象內(nèi)存里就有多少份這個實(shí)例對象變量存在。就像生產(chǎn)了多少小汽車就有多少個方向盤似的。

self代表運(yùn)行時的類的實(shí)例對象本身,一般在類的內(nèi)部設(shè)計時出現(xiàn),在程序里使用對象編程時不用self。在實(shí)例對象的成員函數(shù)里以self.前綴的變量是實(shí)例對象的成員變量,沒有self.的變量是本方法函數(shù)的局部變量。

cls和self出現(xiàn)在構(gòu)造和實(shí)例對象函數(shù)的第一個參數(shù)位置上一樣,cls關(guān)鍵字出現(xiàn)在類的方法函數(shù)里,區(qū)分于對象函數(shù)和變量時會用到。在類的函數(shù)里以cls.前綴的變量也是類的成員變量,沒有這個前綴的是局部變量。

@classmethon這個關(guān)鍵字是修飾器,修飾也是說下面的函數(shù)是類的方法函數(shù)而不是類的對象的方法函數(shù)。

@staticmethod這個也是修飾器,說明接下來的函數(shù)是一個靜態(tài)函數(shù),和實(shí)例對象的成員函數(shù)、類函數(shù)的區(qū)別主要在第一個形參,既無self又無cls。可以被類或?qū)ο笾苯诱{(diào)用。差不多解釋完了,下面來看一個具體的類的實(shí)例程序。

定義一個類的示例

下面創(chuàng)建一個Horse類,類里除了有實(shí)例對象的方法函數(shù)、類方法函數(shù)和靜態(tài)方法函數(shù),還有實(shí)例對象成員變量和類變量。

#?coding:utf-8
class?Horse(object):
????variety?=?"大宛馬"
????def?__init__(self,?name?=?"green",?height?=?0.5,?length?=?1.3,?sex?=?"male"):???
????????self.name?=?name
????????self.height?=?height
????????self.length?=?length
????????self.sex?=?sex
????????print?"A?baby?horse?is?born?called",?self.name
????@classmethod
????def?pp(cls):
????????print?cls.variety,?Horse.variety,?cls.address
????@classmethod
????def?print_variety(cls):
????????cls.address?=?"xi'an"
????????print?cls.variety,?Horse.variety,?cls.address
????????Horse.pp()

????def?print_info(self):
????????print?self.name,?self.height,?self.length,?self.sex,?Horse.variety#,Horse.address
????????Horse.print_variety()

????@staticmethod
????def?print_ci(x,?y):
????????print?x,?y

1).出現(xiàn)在class下一行的variety是類Horse的變量,是類變量,可以通過Horse.variety在類的內(nèi)部或者外部任何地方被訪問。

2).__init__函數(shù)是Horse類的實(shí)例對象的構(gòu)造函數(shù),每次創(chuàng)建一個Horse類的實(shí)例對象時,這個函數(shù)均會被調(diào)用執(zhí)行,其下以self.開始的變量是每個實(shí)例對象的成員變量,即標(biāo)的這個實(shí)例對象的屬性、特征用的。

3). 用修飾器@classmethod修飾的兩個函數(shù)pp、print_variety,是類Horse的類函數(shù),類函數(shù)只可通過類或cls使用。在pp這個函數(shù)里可以看出一點(diǎn),在類的內(nèi)部類變量的使用需前綴類名.或cls.。

類名.類變量
cls.類變量

從print_variety函數(shù)可以看出,在類的內(nèi)部可以通過類調(diào)用類的方法函數(shù)。

類名.類方法

4).用@staticmethod修飾的print_ci函數(shù)是靜態(tài)函數(shù),它的第一個參數(shù)不是特殊的self或者cls,靜態(tài)函數(shù)可在類內(nèi)部或類的外部調(diào)用,也可被類的對象調(diào)用。

創(chuàng)建對象

面向?qū)ο缶幊虒?shí)際是在設(shè)計好類以后,用與類同名的函數(shù)來創(chuàng)建類的對象,用類的對象調(diào)用對象的方法函數(shù)來編寫整個程序,有時可能根據(jù)需要少量地用類調(diào)用類方法的語句代碼出現(xiàn),一般都是對象調(diào)用類里設(shè)計好的對象方法函數(shù)來完成整個程序的功能,故稱面向?qū)ο缶幊獭?/p>

創(chuàng)建類的實(shí)例對象的語法:

變量?=?類名([參數(shù)序列])

通過這樣的方式創(chuàng)建類的實(shí)例對象本質(zhì)是調(diào)用了類里的_ _ init_ ()方法函數(shù),括號里的[參數(shù)序列]意思是看 _ init_ _()方法函數(shù)是否有除self外的其他形參,如無,換括號里沒有任何實(shí)參。

需要特別說明的是任何實(shí)例對象的self形參不用賦值,在Python解譯執(zhí)行程序語句時self代表點(diǎn)兒運(yùn)算符(.)前的實(shí)例對象,或者說self被Python賦值為點(diǎn)兒運(yùn)算符前的實(shí)例對象。

a?=?Horse(sex?=?"male")
b?=?Horse(name?=?"marong",?sex?=?"female")

面向?qū)ο缶幊淌纠?span style="font-weight:bold;">

面向?qū)ο缶幊?#xff0c;需要兩步,第一步先設(shè)計好類,第二步基于類創(chuàng)建對象并通過對象調(diào)用函數(shù)來完成整個程序需要實(shí)現(xiàn)的功能。下面是本節(jié)課設(shè)計的一個Horse類的面向?qū)ο蟪绦蛟O(shè)計的完整示例。

#?coding:utf-8
class?Horse(object):
????variety?=?"大宛馬"
????def?__init__(self,?name?=?"green",?height?=?0.5,?length?=?1.3,?sex?=?"male"):???????
????????#?self.name是成員變量,name是形參、局部變量
????????self.name?=?name
????????self.height?=?height
????????self.length?=?length
????????self.sex?=?sex
????????print?"A?baby?horse?is?born?called",?self.name

????def?print_info(self):
????????print?self.name,?self.height,?self.length,?self.sex,?Horse.variety#,Horse.address
????????Horse.print_variety()?#?在對象方法里通過類調(diào)用類方法,避免
????????Horse().print_ci(200,?100)#?對象調(diào)用靜態(tài)方法
????????Horse.print_ci(200,?100)?#?類調(diào)用靜態(tài)方法

????@staticmethod
????def?print_ci(x,?y):
????????print?x,?y

????@classmethod
????def?pp(cls):
????????#?類使用類變量
????????print?cls.variety,?Horse.variety,?cls.address
????????#cls.print_variety()
????????print?Horse().name??#?對象使用對象的成員變量
????@classmethod
????def?print_variety(cls):
????????cls.address?=?"xi'an"
????????print?"type",?type(cls.address)
????????print?cls.variety,?Horse.variety,?cls.address
????????Horse.pp()#?類調(diào)用類方法
????????Horse().print_ci(100,?100)#?對象調(diào)用靜態(tài)方法

a?=?Horse("xiaoxuanfeng")
b?=?Horse("pilihuo",?sex?=?"female")
a.print_info()
b.print_info()
Horse.print_variety()
print?"*"?*?20
Horse.pp()?#?類調(diào)用類方法
Horse.print_ci(12,?23)#?類外類調(diào)用靜態(tài)方法
a.print_ci(23,?31)?#?類外對象調(diào)用靜態(tài)方法

原文來自:http://suo.im/5MEtwN

總結(jié)

以上是生活随笔為你收集整理的python中扑克牌类设计_Python类的基础设计、使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。