輕松學(xué)會(huì)面向?qū)ο蟮?篇---類可以形象的描述數(shù)據(jù)之間的關(guān)系
不考慮特殊情況,一個(gè)班主任帶一個(gè)班級(jí),這位班主任老師與學(xué)生之間就建立起了一對(duì)多的關(guān)系。
如果不用面向?qū)ο?,你難以用代碼來描述他們之間的關(guān)系。
類,是一種約定,是對(duì)內(nèi)容的約定,對(duì)關(guān)系的約定,對(duì)行為的約定。在沒有實(shí)例被創(chuàng)建出來之前,僅僅通過約定,就能夠讓你對(duì)數(shù)據(jù)有一個(gè)非常全面且形象的理解。
class Student():
def __init__(self, name, yw_score, sx_score):
self.name = name # 姓名
self.yw_score = yw_score # 語文分?jǐn)?shù)
self.sx_score = sx_score # 數(shù)學(xué)分?jǐn)?shù)
self.teacher = None # 老師
class Teacher():
def __init__(self, name):
self.name = name # 姓名
self.students = [] # 學(xué)生
先不要急著考慮如何使用這兩個(gè)類,這不是本文的重點(diǎn)。本文的重點(diǎn)是向你介紹類如何描述數(shù)據(jù)之間的關(guān)系。
類Student定義了一個(gè)teacher屬性,而類Teacher里定義了一個(gè)students屬性,類型是列表,結(jié)合現(xiàn)實(shí)中老師與學(xué)生的關(guān)系,你應(yīng)當(dāng)已經(jīng)猜到,這兩個(gè)屬性將被賦值特定的對(duì)象。
stu = Student('小明', 98, 99)
teacher = Teacher('張老師')
stu.teacher = teacher
teacher.students.append(stu)
print(stu.teacher.name)
print(teacher.students)
在現(xiàn)實(shí)中,你可以通過一個(gè)學(xué)生找到他的老師,也可以通過一個(gè)老師了解到他的學(xué)生。
通過面向?qū)ο蠹夹g(shù),在代碼構(gòu)建出的虛擬邏輯世界中,你仍然可以通過學(xué)生找到老師,通過老師找到學(xué)生。
用面向?qū)ο蟮姆绞娇梢愿玫膩砻枋鼍唧w的世界,也就是建模。
類讓原本抽象的代碼,邏輯,概念,都具象化了,你只需要將類的描述與現(xiàn)實(shí)世界中對(duì)應(yīng)的事物進(jìn)行關(guān)聯(lián),就可以自然且順暢的理解代碼意圖。
反過來,當(dāng)你想用代碼去完成某件事情時(shí),就可以先思考,是否應(yīng)當(dāng)先定義一個(gè)或者幾個(gè)類,來描述或者定義你想做的事情。
