入學不久以後,我就在想,對於學校的這麼多人,這麼多教師,這麼多學生,以及其餘種種事物,可否對應的作一套"系統"下來呢?
隨之也跟着思考了起來。測試
好了,最直觀的映入大腦的就是三個實體:
人、教師、學生。
這三個實體分別有對應的feature屬性以表示其爲人/教師/學生。
由此,獲得如下三個class。設計
class Person(): FEATURE = 'P' def __init__(self): pass class Teacher(Person): FEATURE = 'T' def __init__(self): pass class Student(Person): FEATURE = 'S' def __init__(self): pass
然而,做爲學生表明的我,絕對不容許老師混入進來充當間諜。因此,必須給學生類提供一個方法以判斷是否爲學生。那麼,對於這個方法,僅須要從Student類去調用便可,並不是必定須要實例化的對象。並且,該方法由Student所獨享,Teacher並不須要判斷是否爲學生。由此,Student改進爲如下版本。code
class Student(Person): FEATURE = 'S' def __init__(self): pass @staticmethod def is_student(obj): if obj.FEATURE == 'S': return True else: return False
正在思考的時候,一位代課老師過來看到了個人大概設計,而後說,「同窗啊,你介個設計呢,對於咱們老師,少了點東西,做爲老師,咱們有分文理,文理以後還有數學...blah..blah..」。
而後我就走神了,對啊,老師還根據教學科目分文理呢,有數學老師,有音樂老師,有...對象
class MathTeacher(Teacher): TEACHING = 'MATH' def __init__(self): pass class DrawingTeacher(Teacher): TEACHING = 'DRAWING' def __init__(self): pass
因此以上爲表明的兩個類就誕生了。至於對於文理的判斷,短暫的思考以後,決定把該功能添加到Teacher類作以判斷。ci
class Teacher(Person): FEATURE = 'T' def __init__(self): pass @classmethod def category(cls): science_cate = ['MATH'] arts_cate = ['DRAWING', 'PAINTING'] teaching = getattr(cls, 'TEACHING', None) if teaching in science_cate: return 'Science' elif teaching in arts_cate: return 'Arts' else: return 'Unknow'
在完成以上初步構想以後,決定測試一下所寫代碼是否能按預期執行。
獲得以下測試代碼get
p = Person() t = Teacher() s = Student() print(Student.is_student(p)) #False print(Student.is_student(t)) #False print(Student.is_student(s)) #True
而對於教學分類的判斷,則有如下兩種情形。數學
判斷某個教師 類 屬於哪一個教學分類it
print(DrawingTeacher.category()) #Arts print(MathTeacher.category()) #Science print(Teacher.category()) #Unknow
判斷某個教師 實例 屬於哪一個教學分類class
teacher_wang = DrawingTeacher() teacher_li = MathTeacher() teacher = Teacher() print(teacher_wang.category()) #Arts print(teacher_li.category()) #Science print(teacher.category()) #Unknow
到此時,再回過頭一看,噗,什麼狗屁設計。方法