類是一種數(shù)據(jù)類型,而對象是具有這種數(shù)據(jù)類型的變量。類是抽象的,不占有內(nèi)存空間。而對象是具體的,占有儲層空間。
python中,通過class關(guān)鍵字定義類。
形式:
class className:
類體
類體定義類的成員,有二種類型成員。一是數(shù)據(jù)成員,它描述問題的屬性。二是成員函數(shù),它描述問題的行為。
類是抽象的,要使用類定義的功能必須將類實(shí)例化,即創(chuàng)建對象。 對象名=類名(參數(shù)列表)
class Person:
name=' '
age=0
def display(self):
print('name={0},age={1}'.format(self.name,self.age))
p=Person()
p.name='tom'
p.age=22
p.display()
結(jié)果
name=tom,age=22
面向?qū)ο?,具有繼承,抽象,封裝等特點(diǎn)
python中,定義的方法至少含一個(gè)參數(shù),一般默認(rèn)self(相當(dāng)于,其它語言的this吧),需要作為第一個(gè)參數(shù)。
類屬性就是類對象擁有的屬性,它被類對象共有,在內(nèi)存中只有一個(gè)副本
class Person:
name=' ' #共有類屬性
__age=0 #私有類屬性
def setAge(self,a):
self.__age=a
def display(self):
print('name={0},age={1}'.format(self.name,self.__age))
p=Person()
#p.name='tom' 可以,但是不提倡
Person.name='tom'
p.setAge(22)
p.display()
類屬性,屬于類,既可以通過類訪問,也可以通過對象訪問,但是不建議通過對象訪問。
實(shí)例屬性, 不需要再類中顯示定義,而在init中構(gòu)造函數(shù)中定義,定義時(shí)以self為前綴。在其它方法也可以隨意添加實(shí)例對象對象,建議不這么做,最好在init中給出。
實(shí)例屬性屬于實(shí)例對象,只能通過對象訪問。
class Animal:
def __init__(self,n,c):
self.name=n #定義實(shí)例屬性
self.color=c
def display(self):
print('name={0},color={1}'.format(self.name,self.color))
an=Animal('dog','black')
an.display()
name=dog,color=black
類的方法
類中的內(nèi)置方法, 在python中有一些內(nèi)置方法,這些方法名都有特殊的約定,以2個(gè)下劃線開始,2個(gè)下劃線結(jié)束, 類中最常用的就是構(gòu)造方法和析構(gòu)方法。
構(gòu)造方法 init(self,***) 在生成對象的時(shí)候調(diào)用,可以進(jìn)行一些屬性初始化操作,不需要顯示調(diào)用,系統(tǒng)會默認(rèn)執(zhí)行。構(gòu)造方法支持重載,如果用戶沒有定義新的構(gòu)造方法,系統(tǒng)會自動執(zhí)行默認(rèn)的構(gòu)造方法。
析構(gòu)方法 del(self)在釋放對象的時(shí)候調(diào)用,支持重載,不需要顯示調(diào)用。
class Animal:
def __init__(self,n,c):
self.name=n #定義實(shí)例屬性
self.color=c
print("執(zhí)行了構(gòu)造函數(shù)")
def __del__(self):
print("執(zhí)行了析構(gòu)函數(shù)")
def display(self):
print('name={0},color={1}'.format(self.name,self.color))
an=Animal('dog','black')
an.display()
del an
結(jié)果是:
執(zhí)行了構(gòu)造函數(shù)
name=dog,color=black
執(zhí)行了析構(gòu)函數(shù)
分2部分吧。。。