Python語(yǔ)言基礎(chǔ)(三)

class MyString:

str ="xiaoming"

? ? def output(self):

print(self.str)

s = MyString()

s.output()

print(s.str)

構(gòu)造函數(shù)

class Myname:

。def __init__(self): #構(gòu)造函數(shù)

self.name ="xiaoming"

? ? def __del__(self):?#析造函數(shù)

print("byebye~")

def prf(self):

print(self.name)

del ps 刪除對(duì)象

析構(gòu)函數(shù)有一個(gè)固定的名稱,__del__().通常在析構(gòu)函數(shù)中釋放類所占用的資源。使用del刪除一個(gè)對(duì)象,釋放它所占用的資源

靜態(tài)方法無(wú)需傳入self參數(shù),因此在靜態(tài)方法中無(wú)法訪問(wèn)實(shí)例變量。

在靜態(tài)方法中不可以直接訪問(wèn)類的靜態(tài)變量,但可以通過(guò)類名引用靜態(tài)變量。

因?yàn)殪o態(tài)方法既無(wú)法訪問(wèn)實(shí)例變量,也不能直接訪問(wèn)類的靜態(tài)變量,所以靜態(tài)方法與定義它的類沒(méi)有直接關(guān)系,而是起到了類似函數(shù)工具庫(kù)的作用


類方法

類方法與靜態(tài)方法一樣,可以使用類名調(diào)用類方法

類成員方法也無(wú)法訪問(wèn)實(shí)例變量,但可以訪問(wèn)累的靜態(tài)變量

類方法需傳入代表本類的cls參數(shù)

可以使用@classmethod定義類方法

#類方法

class myname:#定義類

? ? val1 ="string 3"#靜態(tài)變量

? ? def __init__(self):

self.val2 ='value 2'

? ? @ classmethod #類方法

? ? def classmd(cls):

print('類' +str(cls) +',val1:' +cls.val1 +'無(wú)法訪問(wèn)val2的值')

可以通過(guò)對(duì)象名調(diào)用類方法,也可以通過(guò)類名調(diào)用類方法。

類方法有一個(gè)參數(shù)cls,代表定義類方法的類,可以通過(guò)cls訪問(wèn)類的靜態(tài)變量。

使用isinstance()函數(shù)判斷對(duì)象類型,返回True/False

print(isinstance(c,MyClass))


類的繼承和多態(tài)

#類的繼承和多態(tài)

import time

class Users:

username =""

? ? def __init__(self,uname):

self.username = uname

print("(構(gòu)造函數(shù):"+self.username+')')

#顯示用戶名

? ? def dispUserName(self):

print(self.username)

class UserLogin(Users):

def __init__(self,uname,lastLoginTime):

Users.__init__(self,uname)#調(diào)用父類Users的構(gòu)造函數(shù)

? ? ? ? self.lastLoginTime = lastLoginTime

def dispLoginTime(self):

print("登錄時(shí)間為:"+self.lastLoginTime) ? ??

#獲取當(dāng)前時(shí)間

now = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))


抽象類和多態(tài)

抽象類是包含抽象方法的類,而抽象方法不包含任何實(shí)現(xiàn)的代碼,只能在其子類中實(shí)現(xiàn)抽象函數(shù)的代碼。

定義抽象類:需要從類庫(kù)abc導(dǎo)入ABCMeta類和abstractmethod類

from abcimport ABCMeta,abstractmethod

實(shí)現(xiàn)抽象類:可以從抽象類派生子類。方法與普通類的派生和繼承一樣

多態(tài):是指抽象類中定義的一個(gè)方法,可以在其子類中重新實(shí)現(xiàn),不同子類中的實(shí)現(xiàn)方法也不相同

#抽象類

class Shape(object):

__metaclass__ = ABCMeta

def __init__(self):

self.color ='black'#默認(rèn)使用黑色

? ? @abstractmethod

? ? def draw(self):pass

class circle(Shape):

def __init__(self,x,y,r):#定義圓心坐標(biāo)和半徑

? ? ? ? self.x = x

self.y = y

self.r = r

def draw(self):

print("Draw Circle:(%d,%d,%d)" %(self.x,self.y,self.r))

class line(Shape):

def __init__(self,x1,y1,x2,y2):#定義起止坐標(biāo)值

? ? ? ? self.x1 = x1

self.y1 = y1

self.x2 = x2

self.y2 = y2

def draw(self):

print("Draw Line:(%d,%d,%d,%d)" %(self.x1,self.y1,self.x2,self.y2))

在不同的子類中,抽象方法draw()有不同的實(shí)現(xiàn),這就是類的多態(tài)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容