亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python中的classmethod與staticmethod

 更新時間:2022年01月26日 11:42:03   作者:咕嘟咕嘟_  
這篇文章主要介紹了python中的classmethod與staticmethod,

1.靜態(tài)方法(staticmethod)

靜態(tài)方法:

@staticmethod也是一個類方法,是可以直接類調用的。個人認為的使用場景是:只要要定義的方法里不涉及到self參數(shù),就用靜態(tài)方法承擔。因為這樣就表明這個方法和本身的類沒有關系,明確的區(qū)別出類相關和不相關。

class A:
? ? def __init__(self, a, b):
? ? ? ? self.a = a
? ? ? ? self.b = b

? ? def do_normal_something(self, a, b):
? ? ? ? print("do_normal_something",a,b)

? ? @staticmethod
? ? def do_static_something(a,b):
? ? ? ? print('do_static_something',a,b)

? ? @classmethod
? ? def do_class_something(cls):
? ? ? ? pass

? ? def __call__(self,a,b):
? ? ? ? print("123call",a,b)

a = A(1,2)
a.do_normal_something(7,8)
a.do_static_something(5,6)

2.類方法(classmethod)

為什么會出現(xiàn)classmethod

classmethod設計的目的是什么呢?事實上與Python面向對象編程有關的,由于Python不支持多個的參數(shù)重載構造函數(shù),比方在C++里,構造函數(shù)能夠依據(jù)參數(shù)個數(shù)不一樣。能夠寫多個構造函數(shù)。Python為了解決問題,採用classmethod修飾符的方式,這樣定義出來的函數(shù)就能夠在類對象實例化之前調用這些函數(shù),就相當于多個構造函數(shù),解決多個構造函數(shù)的代碼寫在類外面的問題。

  • 類最基本的作用是實例化出一個對象,但是有的時候在實例化之前,就需要先和類做一定的交互,這種交互可能會影響實際實例化的過程,所以必須放在調用構造函數(shù)之前。大概也可能是因為這個原因出現(xiàn)了classmethod
  • 直接一點來說,我們知道對于一個普通的類,我們要使用其中的方法的話,需要對類進行實例化,而一個類中,某個函數(shù)前面加上了staticmethod或者classmethod的話,那么這個函數(shù)就可以不通過實例化直接調用,可以通過類名進行調用的
  • @classmethod 定義的類方法是可選構造函數(shù)中,我們定義了一個類方法,類方法的第一個參數(shù)(cls)指代的就是類本身。類方法會用這個類來創(chuàng)建并返回最終的實例。使用類方法的另一個好處就是在繼承的時候,保證了子類使用可選構造函數(shù)構造出來的類是子類的實例而不是父類的實例。

案例:

class Data_test(object):

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

? ? def out_date(self):
? ? ? ? print('year:',self.year,'month:',self.month,'day:',self.day)

t = Data_test(2016, 8, 1)
t.out_date()

但是如果用戶輸入的是 “2016-8-1” 這樣的字符格式,那么就需要調用Date_test 類前做一下處理:

class Data_test(object):

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

? ? def out_date(self):
? ? ? ? print('year:',self.year,'month:',self.month,'day:',self.day)


string_date = '2016-8-1'
year, month, day = map(int, string_date.split('-'))
s = Data_test(year, month, day)
s.out_date()

先把‘2016-8-1’ 分解成 year,month,day 三個變量,然后轉成int,再調用Date_test(year,month,day)函數(shù)。 也很符合期望。

那我可不可以把這個字符串處理的函數(shù)放到 Date_test 類當中呢?

那么@classmethod 就開始出場了

class Data_test(object):

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

? ? @classmethod
? ? def getdata(cls,str): #cls表示調用當前類名
? ? ? ? year, month, day = map(int, string_date.split('-'))
? ? ? ? s = cls(year,month,day)
? ? ? ? return s #返回一個初始化的類

? ? def out_date(self):
? ? ? ? print('year:',self.year,'month:',self.month,'day:',self.day)


string_date = '2016-8-1'
s = Data_test.getdata(string_date)
s.out_date()

在繼承時也能工作的很好:

類方法的一個主要用途就是定義多個構造器。它接受一個class 作為第一個參數(shù)(cls)。在繼承時也能工作的很好:

import time

class Data:
? ? #主要構造器
? ? def __init__(self,y,m,d):
? ? ? ? self.year = y
? ? ? ? self.month = m
? ? ? ? self.day = d
? ? ? ? print('year:', self.year, 'month:', self.month, 'day:', self.day)
? ? # 可選擇的構造器
? ? @classmethod
? ? def today(cls):
? ? ? ? t = time.localtime()
? ? ? ? return cls(t.tm_year,t.tm_mon,t.tm_mday)

a = Data(2022,1,13) #主要構造器
b = Data.today() #可選擇的構造器

class NewData(Data):
? ? pass
c = NewData.today() #繼承的時候也可照樣工作

 到此這篇關于python中的classmethod與staticmethod的文章就介紹到這了,更多相關python的classmethod和staticmethod內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • djang常用查詢SQL語句的使用代碼

    djang常用查詢SQL語句的使用代碼

    這篇文章主要介紹了djang常用查詢SQL語句的使用代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-02-02
  • python3 配置logging日志類的操作

    python3 配置logging日志類的操作

    這篇文章主要介紹了python3 配置logging日志類的操作方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • python getpass模塊用法及實例詳解

    python getpass模塊用法及實例詳解

    這篇文章主要介紹了python getpass模塊用法及實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • python?unicodedata模塊用法

    python?unicodedata模塊用法

    這篇文章主要為大家介紹了python?unicodedata模塊用法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 詳解Python發(fā)送email的三種方式

    詳解Python發(fā)送email的三種方式

    這篇文章主要介紹了詳解Python發(fā)送email的三種方式,Python發(fā)送email的三種方式,分別為使用登錄郵件服務器、使用smtp服務、調用sendmail命令來發(fā)送三種方法,非常具有實用價值,需要的朋友可以參考下
    2018-10-10
  • Python基于分析Ajax請求實現(xiàn)抓取今日頭條街拍圖集功能示例

    Python基于分析Ajax請求實現(xiàn)抓取今日頭條街拍圖集功能示例

    這篇文章主要介紹了Python基于分析Ajax請求實現(xiàn)抓取今日頭條街拍圖集功能,涉及Python針對今日頭條URL請求與json數(shù)據(jù)處理相關操作技巧,需要的朋友可以參考下
    2018-07-07
  • python實現(xiàn)sublime3的less編譯插件示例

    python實現(xiàn)sublime3的less編譯插件示例

    這篇文章主要介紹了python實現(xiàn)sublime3的less編譯插件示例的相關資料
    2014-04-04
  • pywinauto自動化測試使用經驗

    pywinauto自動化測試使用經驗

    本文主要介紹了pywinauto自動化測試使用經驗,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • python讀取txt文件中特定位置字符的方法

    python讀取txt文件中特定位置字符的方法

    今天小編就為大家分享一篇python讀取txt文件中特定位置字符的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python定時任務schedule庫用法詳細講解

    python定時任務schedule庫用法詳細講解

    python中有一個輕量級的定時任務調度的庫schedule,下面這篇文章主要給大家介紹了關于python定時任務schedule庫用法的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01

最新評論