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