1.類與對象的概念
1.1類
類即類別、種類漾根,是一種數(shù)據(jù)結(jié)構(gòu)泰涂。如果把對象比作是特征與技能的結(jié)合體,那么類則是一系列對象相似的特征與技能的結(jié)合體辐怕。
- 在現(xiàn)實(shí)世界中:一定先有對象逼蒙,后有類
- 在程序中:一定得先定義類,后調(diào)用類來產(chǎn)生對象
#先定義類
class LuffyStudent:
school='luffycity'
def learn(self):
print('is learning')
def eat(self):
print('is sleeping')
#后產(chǎn)生對象
stu1=LuffyStudent()
stu2=LuffyStudent()
stu3=LuffyStudent()
需要注意的是:
- 類中可以有任意python代碼寄疏,這些代碼在類定義階段便會執(zhí)行是牢,因而會產(chǎn)生新的名稱空間,用來存放類的變量名與函數(shù)名陕截,可以通過
LuffyStudent.__dict__
查看 - 類中定義的名字驳棱,都是類的屬性,點(diǎn)是訪問屬性的語法农曲。
- 對于經(jīng)典類來說我們可以通過該字典操作類名稱空間的名字社搅,但新式類有限制(新式類與經(jīng)典類的區(qū)別我們將在后續(xù)章節(jié)介紹)
1.2 類的使用
1.2.1類的引用
- 查看類的名稱空間
print(LuffyStudent.__dict__)
print(LuffyStudent.__dict__['school'])
print(LuffyStudent.__dict__['learn'])
- 查看
print(LuffyStudent.school) #LuffyStudent.__dict__['school']
- 增
LuffyStudent.country = 'China' #LuffyStudent.['country'] = 'China'
- 刪
del LuffyStudent.country
- 改
LuffyStudent.school = 'Luffycity'
1.2.2 調(diào)用類,也成為實(shí)例化朋蔫,得到程序中的對象
s1=LuffyStudent()
s2=LuffyStudent()
s3=LuffyStudent()
#如此罚渐,s1、s2驯妄、s3都一樣了荷并,而這三者除了相似的屬性之外還各種不同的屬性,這就用到了__init__
1.2.3 __int__方法
_init_方法用來為對象定制對象自己獨(dú)有的特征
#注意:該方法是在對象產(chǎn)生之后才會執(zhí)行青扔,只用來為對象進(jìn)行初始化操作源织,可以有任意代碼,但一定不能有返回值
class LuffyStudent:
......
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
......
s1=LuffyStudent('Tom','male',18) #先調(diào)用類產(chǎn)生空對象s1微猖,然后調(diào)用luffyStudent.__init__(s1,'Tom','male',18)
s2=LuffyStudent('Rose','female',38)
s3=LuffyStudent('Jack','male',78)
1.2.4對象的操作
- 生成對象
stu1=LuffyStudent('王二丫','女',18) #LuffyStudent.__init__(stu1,'王二丫','女',18)
- 加上init方法后谈息,實(shí)例化的步驟
? 1、先產(chǎn)生一個(gè)空對象stu1
? 2凛剥、LuffyStudent.init(stu1,'王二丫','女',18)
- 查
print(stu1.dict)
- 改
stu1.Name='李二丫'
print(stu1.dict)
print(stu1.Name)
- 刪除
del stu1.Name
print(stu1.dict)
- 增
stu1.class_name='python開發(fā)'
print(stu1.dict)
補(bǔ)充說明
- 站的角度不同侠仇,定義出的類是截然不同的;
- 現(xiàn)實(shí)中的類并不完全等于程序中的類,比如現(xiàn)實(shí)中的公司類逻炊,在程序中有時(shí)需要拆分成部門類互亮,業(yè)務(wù)類等;
- 有時(shí)為了編程需求余素,程序中也可能會定義現(xiàn)實(shí)中不存在的類豹休,比如策略類,現(xiàn)實(shí)中并不存在桨吊,但是在程序中卻是一個(gè)很常見的類威根。