Python?class類@staticmethod及@classmethod區(qū)別淺析
前言
入學(xué)不久之后,我就在想,對于學(xué)校的這么多人,這么多教師,這么多學(xué)生,以及其他種種事物,能否對應(yīng)的做一套"系統(tǒng)"下來呢?
隨之也跟著思考了起來。
設(shè)計(jì)
好了,最直觀的映入大腦的就是三個(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
以上就是Python class類@staticmethod及@classmethod區(qū)別淺析的詳細(xì)內(nèi)容,更多關(guān)于Python staticmethod classmethod的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Pytorch實(shí)現(xiàn)常用乘法算子TensorRT的示例代碼
pytorch 用于訓(xùn)練,TensorRT用于推理是很多AI應(yīng)用開發(fā)的標(biāo)配。大家往往更加熟悉 pytorch 的算子,而不太熟悉TensorRT的算子。本文介紹了Pytorch中常用乘法的TensorRT實(shí)現(xiàn),感興趣的可以了解一下2022-06-06
19個(gè)Python?Sklearn中超實(shí)用的隱藏功能分享
今天跟大家介紹?19?個(gè)?Sklearn?中超級實(shí)用的隱藏的功能,這些功能雖然不常見,但非常實(shí)用,它們可以直接優(yōu)雅地替代手動(dòng)執(zhí)行的常見操作2022-07-07
Python跑循環(huán)時(shí)內(nèi)存泄露的解決方法
這篇文章主要介紹了Python跑循環(huán)時(shí)內(nèi)存泄露的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
Flask框架學(xué)習(xí)筆記(一)安裝篇(windows安裝與centos安裝)
Flask是一個(gè)輕量級的Web應(yīng)用框架, 使用Python編寫。Flask也被稱為 “microframework” ,因?yàn)樗褂煤唵蔚暮诵?,?extension 增加其他功能。2014-06-06
Python3中configparser模塊讀寫ini文件并解析配置的用法詳解
這篇文章主要介紹了Python3中configparser模塊讀寫ini文件并解析配置的用法詳解,需要的朋友可以參考下2020-02-02

