成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

淺聊Python class中的@staticmethod以及@classmethod

baoxl / 3489人閱讀

摘要:然而,作為學(xué)生代表的我,絕對不允許老師混入進(jìn)來充當(dāng)間諜。而且,該方法由所獨享,并不需要判斷是否為學(xué)生。由此,改進(jìn)為以下版本。得到如下測試代碼而對于教學(xué)分類的判斷,則有以下兩種情形。

前言

入學(xué)不久之后,我就在想,對于學(xué)校的這么多人,這么多教師,這么多學(xué)生,以及其他種種事物,能否對應(yīng)的做一套"系統(tǒng)"下來呢?
隨之也跟著思考了起來。

設(shè)計

好了,最直觀的映入大腦的就是三個實體:
、教師、學(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

相關(guān)文章

  • classmethod&staticmethod 以及 __slots__

    摘要:什么是中的它的用途是什么裝飾器對應(yīng)的函數(shù)不需要實例化,不需要參數(shù),但第一個參數(shù)需要是表示自身類的參數(shù),可以來調(diào)用類的屬性,類的方法,實例化對象等。 什么是python中的classmethod,它的用途是什么? classmethod裝飾器對應(yīng)的函數(shù)不需要實例化,不需要 self 參數(shù),但第一個參數(shù)需要是表示自身類的 cls 參數(shù),可以來調(diào)用類的屬性,類的方法,實例化對象等。 cl...

    newsning 評論0 收藏0
  • 90 % 的 Python 開發(fā)者不知道的描述符應(yīng)用

    摘要:由上面的注釋,可以看出其實就相當(dāng)于一個描述符類,而在此刻變成了一個描述符。調(diào)用這個方法可以知道,每調(diào)用一次,它都會經(jīng)過描述符類的?;诿枋龇绾螌崿F(xiàn)同樣的也是一樣。我想你應(yīng)該對描述符在中的應(yīng)用有了更深的理解。好吧,我承認(rèn)我標(biāo)題黨了。但是這篇文章的知識點,你有極大的可能并不知道。 前段時間,我寫了一篇描述符的入門級文章,從那些文章里你知道了如何定義描述符,且明白了描述符是如何工作的。 如果你還...

    番茄西紅柿 評論0 收藏0
  • 90 % 的 Python 開發(fā)者不知道的描述符應(yīng)用

    摘要:由上面的注釋,可以看出其實就相當(dāng)于一個描述符類,而在此刻變成了一個描述符。調(diào)用這個方法可以知道,每調(diào)用一次,它都會經(jīng)過描述符類的?;诿枋龇绾螌崿F(xiàn)同樣的也是一樣。我想你應(yīng)該對描述符在中的應(yīng)用有了更深的理解。好吧,我承認(rèn)我標(biāo)題黨了。但是這篇文章的知識點,你有極大的可能并不知道。 前段時間,我寫了一篇描述符的入門級文章,從那些文章里你知道了如何定義描述符,且明白了描述符是如何工作的。 如果你還...

    0x584a 評論0 收藏0
  • python classmethod 與 staticmethod 小談

    摘要:而類的實例并不會影響類的靜態(tài)變量,只是會修改對象實例本身的值,所以后面兩個的結(jié)果總是同樣,如果我們使用和結(jié)果也將僅僅是靜態(tài)變量變化后的結(jié)果,與類的實例無關(guān)以上是對和的暫時做的了解的總結(jié),如有紕漏,請及時指正 概念 python 的classmethod 與staticmethod 這兩個有什么區(qū)別? 二者又有什么聯(lián)系?在google和baidu之后, 得到的大致的聯(lián)系就是二者都是對類的...

    keke 評論0 收藏0
  • PyTips 0x14 - Python 描述符

    摘要:項目地址本篇主要關(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...

    since1986 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<