Python?class類(lèi)@staticmethod及@classmethod區(qū)別淺析
前言
入學(xué)不久之后,我就在想,對(duì)于學(xué)校的這么多人,這么多教師,這么多學(xué)生,以及其他種種事物,能否對(duì)應(yīng)的做一套"系統(tǒng)"下來(lái)呢?
隨之也跟著思考了起來(lái)。
設(shè)計(jì)
好了,最直觀的映入大腦的就是三個(gè)實(shí)體:
人、教師、學(xué)生。
這三個(gè)實(shí)體分別有對(duì)應(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é)生代表的我,絕對(duì)不允許老師混入進(jìn)來(lái)充當(dāng)間諜。所以,必須給學(xué)生類(lèi)提供一個(gè)方法以判斷是否為學(xué)生。那么,對(duì)于這個(gè)方法,僅需要從Student類(lèi)去調(diào)用即可,并非一定需要實(shí)例化的對(duì)象。而且,該方法由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í)候,一位代課老師過(guò)來(lái)看到了我的大概設(shè)計(jì),然后說(shuō),“同學(xué)啊,你介個(gè)設(shè)計(jì)呢,對(duì)于我們老師,少了點(diǎn)東西,作為老師,我們有分文理,文理之后還有數(shù)學(xué)...blah..blah..”。
然后我就走神了,對(duì)啊,老師還根據(jù)教學(xué)科目分文理呢,有數(shù)學(xué)老師,有音樂(lè)老師,有...
class MathTeacher(Teacher): TEACHING = 'MATH' def __init__(self): pass class DrawingTeacher(Teacher): TEACHING = 'DRAWING' def __init__(self): pass
所以以上為代表的兩個(gè)類(lèi)就誕生了。至于對(duì)于文理的判斷,短暫的思考之后,決定把該功能添加到Teacher類(lèi)做以判斷。
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'
測(cè)試
在完成以上初步構(gòu)想之后,決定測(cè)試一下所寫(xiě)代碼是否能按預(yù)期執(zhí)行。
得到如下測(cè)試代碼
p = Person() t = Teacher() s = Student() print(Student.is_student(p)) #False print(Student.is_student(t)) #False print(Student.is_student(s)) #True
而對(duì)于教學(xué)分類(lèi)的判斷,則有以下兩種情形。
判斷某個(gè)教師 類(lèi) 屬于哪個(gè)教學(xué)分類(lèi)
print(DrawingTeacher.category()) #Arts print(MathTeacher.category()) #Science print(Teacher.category()) #Unknow
判斷某個(gè)教師 實(shí)例 屬于哪個(gè)教學(xué)分類(lèi)
teacher_wang = DrawingTeacher() teacher_li = MathTeacher() teacher = Teacher() print(teacher_wang.category()) #Arts print(teacher_li.category()) #Science print(teacher.category()) #Unknow
以上就是Python class類(lèi)@staticmethod及@classmethod區(qū)別淺析的詳細(xì)內(nèi)容,更多關(guān)于Python staticmethod classmethod的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python標(biāo)準(zhǔn)庫(kù)中內(nèi)置裝飾器@staticmethod和@classmethod
- Python中類(lèi)方法@classmethod和靜態(tài)方法@staticmethod解析
- 詳解python中@classmethod和@staticmethod方法
- 詳解Python中@staticmethod和@classmethod區(qū)別及使用示例代碼
- Python 類(lèi)方法和實(shí)例方法(@classmethod),靜態(tài)方法(@staticmethod)原理與用法分析
- Python中@classmethod和@staticmethod的區(qū)別
相關(guān)文章
python統(tǒng)計(jì)字符串中指定字符出現(xiàn)次數(shù)的方法
這篇文章主要介紹了python統(tǒng)計(jì)字符串中指定字符出現(xiàn)次數(shù)的方法,涉及Python中count函數(shù)的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04python政策網(wǎng)字體反爬實(shí)例(附完整代碼)
大家好,本篇文章主要講的是python政策網(wǎng)字體反爬實(shí)例(附完整代碼),感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01淺談PyTorch的數(shù)據(jù)讀取機(jī)制Dataloader與Dataset
這篇文章主要介紹了淺談PyTorch的數(shù)據(jù)讀取機(jī)制Dataloader與Dataset,DataLoader的作用是構(gòu)建一個(gè)可迭代的數(shù)據(jù)裝載器,每次執(zhí)行循環(huán)的時(shí)候,就從中讀取一批Batchsize大小的樣本進(jìn)行訓(xùn)練,需要的朋友可以參考下2023-07-07Python列表轉(zhuǎn)換為Excel表格第一列的方法詳解
在數(shù)據(jù)處理和分析的過(guò)程中,我們經(jīng)常需要將Python中的數(shù)據(jù)結(jié)構(gòu)(如列表)導(dǎo)出到Excel表格中,本文為大家整理了Python列表轉(zhuǎn)換為Excel表格第一列的幾種方法,希望對(duì)大家有所幫助2024-11-11python?Sweetviz探索性數(shù)據(jù)可視化分析庫(kù)使用特征詳解
這篇文章主要為大家介紹了python?Sweetviz探索性數(shù)據(jù)可視化分析庫(kù)特征使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Django框架orM與自定義SQL語(yǔ)句混合事務(wù)控制操作
這篇文章主要介紹了Django框架orM與自定義SQL語(yǔ)句混合事務(wù)控制操作,結(jié)合實(shí)例形式分析了同一個(gè)方法里面既有ORM又有自定義SQL 語(yǔ)句的情況下事務(wù)控制相關(guān)操作技巧,需要的朋友可以參考下2019-06-06