摘要:然而,作為學(xué)生代表的我,絕對不允許老師混入進(jìn)來充當(dāng)間諜。而且,該方法由所獨(dú)享,并不需要判斷是否為學(xué)生。由此,改進(jìn)為以下版本。得到如下測試代碼而對于教學(xué)分類的判斷,則有以下兩種情形。
前言
入學(xué)不久之后,我就在想,對于學(xué)校的這么多人,這么多教師,這么多學(xué)生,以及其他種種事物,能否對應(yīng)的做一套"系統(tǒng)"下來呢?
隨之也跟著思考了起來。
好了,最直觀的映入大腦的就是三個(gè)實(shí)體:
人、教師、學(xué)生。
這三個(gè)實(shí)體分別有對應(yīng)的feature屬性以表示其為人/教師/學(xué)生。
由此,得到以下三個(gè)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
然而,作為學(xué)生代表的我,絕對不允許老師混入進(jìn)來充當(dāng)間諜。所以,必須給學(xué)生類提供一個(gè)方法以判斷是否為學(xué)生。那么,對于這個(gè)方法,僅需要從Student類去調(diào)用即可,并非一定需要實(shí)例化的對象。而且,該方法由Student所獨(dú)享,Teacher并不需要判斷是否為學(xué)生。由此,Student改進(jìn)為以下版本。
class Student(Person): FEATURE = "S" def __init__(self): pass @staticmethod def is_student(obj): if obj.FEATURE == "S": return True else: return False
正在思考的時(shí)候,一位代課老師過來看到了我的大概設(shè)計(jì),然后說,“同學(xué)啊,你介個(gè)設(shè)計(jì)呢,對于我們老師,少了點(diǎn)東西,作為老師,我們有分文理,文理之后還有數(shù)學(xué)...blah..blah..”。
然后我就走神了,對啊,老師還根據(jù)教學(xué)科目分文理呢,有數(shù)學(xué)老師,有音樂老師,有...
class MathTeacher(Teacher): TEACHING = "MATH" def __init__(self): pass class DrawingTeacher(Teacher): TEACHING = "DRAWING" def __init__(self): pass
所以以上為代表的兩個(gè)類就誕生了。至于對于文理的判斷,短暫的思考之后,決定把該功能添加到Teacher類做以判斷。
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"測試
在完成以上初步構(gòu)想之后,決定測試一下所寫代碼是否能按預(yù)期執(zhí)行。
得到如下測試代碼
p = Person() t = Teacher() s = Student() print(Student.is_student(p)) #False print(Student.is_student(t)) #False print(Student.is_student(s)) #True
而對于教學(xué)分類的判斷,則有以下兩種情形。
判斷某個(gè)教師 類 屬于哪個(gè)教學(xué)分類
print(DrawingTeacher.category()) #Arts print(MathTeacher.category()) #Science print(Teacher.category()) #Unknow
判斷某個(gè)教師 實(shí)例 屬于哪個(gè)教學(xué)分類
teacher_wang = DrawingTeacher() teacher_li = MathTeacher() teacher = Teacher() print(teacher_wang.category()) #Arts print(teacher_li.category()) #Science print(teacher.category()) #Unknow結(jié)束
到此時(shí),再回過頭一看,噗,什么狗屁設(shè)計(jì)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/37639.html
摘要:什么是中的它的用途是什么裝飾器對應(yīng)的函數(shù)不需要實(shí)例化,不需要參數(shù),但第一個(gè)參數(shù)需要是表示自身類的參數(shù),可以來調(diào)用類的屬性,類的方法,實(shí)例化對象等。 什么是python中的classmethod,它的用途是什么? classmethod裝飾器對應(yīng)的函數(shù)不需要實(shí)例化,不需要 self 參數(shù),但第一個(gè)參數(shù)需要是表示自身類的 cls 參數(shù),可以來調(diào)用類的屬性,類的方法,實(shí)例化對象等。 cl...
摘要:由上面的注釋,可以看出其實(shí)就相當(dāng)于一個(gè)描述符類,而在此刻變成了一個(gè)描述符。調(diào)用這個(gè)方法可以知道,每調(diào)用一次,它都會經(jīng)過描述符類的。基于描述符如何實(shí)現(xiàn)同樣的也是一樣。我想你應(yīng)該對描述符在中的應(yīng)用有了更深的理解。好吧,我承認(rèn)我標(biāo)題黨了。但是這篇文章的知識點(diǎn),你有極大的可能并不知道。 前段時(shí)間,我寫了一篇描述符的入門級文章,從那些文章里你知道了如何定義描述符,且明白了描述符是如何工作的。 如果你還...
摘要:由上面的注釋,可以看出其實(shí)就相當(dāng)于一個(gè)描述符類,而在此刻變成了一個(gè)描述符。調(diào)用這個(gè)方法可以知道,每調(diào)用一次,它都會經(jīng)過描述符類的。基于描述符如何實(shí)現(xiàn)同樣的也是一樣。我想你應(yīng)該對描述符在中的應(yīng)用有了更深的理解。好吧,我承認(rèn)我標(biāo)題黨了。但是這篇文章的知識點(diǎn),你有極大的可能并不知道。 前段時(shí)間,我寫了一篇描述符的入門級文章,從那些文章里你知道了如何定義描述符,且明白了描述符是如何工作的。 如果你還...
摘要:而類的實(shí)例并不會影響類的靜態(tài)變量,只是會修改對象實(shí)例本身的值,所以后面兩個(gè)的結(jié)果總是同樣,如果我們使用和結(jié)果也將僅僅是靜態(tài)變量變化后的結(jié)果,與類的實(shí)例無關(guān)以上是對和的暫時(shí)做的了解的總結(jié),如有紕漏,請及時(shí)指正 概念 python 的classmethod 與staticmethod 這兩個(gè)有什么區(qū)別? 二者又有什么聯(lián)系?在google和baidu之后, 得到的大致的聯(lián)系就是二者都是對類的...
摘要:項(xiàng)目地址本篇主要關(guān)于三個(gè)常用內(nèi)置方法,,在語言的設(shè)計(jì)中,通常的語法操作最終都會轉(zhuǎn)化為方法調(diào)用,例如相當(dāng)于中的描述符就是將對象屬性的獲取賦值以及刪除等行為轉(zhuǎn)換為方法調(diào)用的協(xié)議例如我們要獲取一個(gè)對象的屬性,可以通過的方式取得而通過的 項(xiàng)目地址:https://git.io/pytips 本篇主要關(guān)于三個(gè)常用內(nèi)置方法:property(),staticmethod(),classmethod...
閱讀 2963·2021-10-20 13:46
閱讀 2517·2021-08-12 13:22
閱讀 2700·2019-08-30 15:54
閱讀 2340·2019-08-30 15:53
閱讀 545·2019-08-30 13:47
閱讀 3581·2019-08-23 16:56
閱讀 1725·2019-08-23 13:02
閱讀 1795·2019-08-23 12:25