classmethod的兩個實用用法

用法一:classmethod 和 staticmethod 都可以不用實例化直接調(diào)用

class demo1:
    @classmethod
    def c_demo(cls):
        return 1

    @staticmethod
    def s_demo():
        return 2

print(demo1.c_demo())   #1
print(demo1.s_demo())   #2

用法二:在不改變已經(jīng)寫好的類里面的方法的情況下,對輸入的數(shù)據(jù)進行處理,在外國論壇看到一個特別好的例子

# https://stackoverflow.com/questions/12179271/meaning-of-classmethod-and-staticmethod-for-beginner

# 輸出年月日,正常的情況下

class demo2:
    def __init__(self, year = 0, month = 0, day = 0):
        self.year = year
        self.month = month
        self.day = day

    def out_date(self):
        return "year:%d, month:%d, day:%d" % (self.year, self.month, self.day)

year = 2017
month = 7
day = 1

demo2 = demo2(year, month, day)
print(demo2.out_date())

# year:2017, month:7, day:1
# 如果用戶輸入的是2017-5-6格式,需要在輸出前處理一下,就可以使用classmethod達(dá)到想要的效果

class demo3:
    def __init__(self, year = 0, month = 0, day = 0):
        self.year = year
        self.month = month
        self.day = day

    def out_date(self):
        return "year:%d, month:%d, day:%d" % (self.year, self.month, self.day)

    @classmethod
    def pre_out(cls, date_string):
        year, month, day = map(int, date_string.split("-"))
        return cls(year, month, day)

date = "2017-5-6"
year = 2017
month = 7
day = 1

try:
    demo3 = demo3.pre_out(date)
except:
    demo3 = demo3(year, month, day)

print(demo3.out_date())

# year:2017, month:5, day:6
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容