溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python3.0中普通方法、類方法和靜態(tài)方法有什么區(qū)別

發(fā)布時間:2021-08-18 14:33:54 來源:億速云 閱讀:140 作者:小新 欄目:開發(fā)技術

小編給大家分享一下Python3.0中普通方法、類方法和靜態(tài)方法有什么區(qū)別,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

一、語法區(qū)別

首先開始編輯代碼

# 普通方法、類方法、靜態(tài)方法的比較
# 普通方法、類方法、靜態(tài)方法的比較
class Test:
  # 定義類Test的屬性
  name = 'python'
  content = '人生苦短,我用python!'
  def normal_method(self): # 普通方法訪問類Text的屬性
    print(self.content)
  @classmethod #類方法訪問Test類的屬性,看到@staticmethod我們就知道這個方法并不需要依賴對象本身的狀態(tài)
  def class_method(cls):
    print(cls.content)
  @staticmethod #靜態(tài)方法,無法訪問Test類的屬性,
  def static_method():
    print('content')

進行測試一

t = Test()
t.content = '人生苦短,及時行樂'#設置對象t的屬性
 
t.normal_method()
t.class_method()
t.static_method()
 
# 結果
人生苦短,及時行樂
人生苦短,我用python!
content

使用普通方法、類方法和靜態(tài)方法都可以通過對象(t)進行調用,但是靜態(tài)方法和類方法無法訪問對象的屬性,所以更改對象(t)的屬性僅僅只是對普通方法起作用。

進行測試二

# Test.content('name')出現(xiàn)錯誤,普通方法無法通過類調用
Test.class_method()
Test.static_method()
# 結果
人生苦短,我用python!
content

普通方法無法通過類名調用,但靜態(tài)方法和類方法是可以的。

總結

三種方法都可以通過對象進行調用,但類方法和靜態(tài)方法無法訪問對象屬性,類方法通過對象調用獲取的仍是類屬性(并非對象屬性);普通方法無法通過類名調用,類方法和靜態(tài)方法可以,但靜態(tài)方法不能進行訪問,僅僅只是通過傳值得方式(與函數(shù)調用相同)

二、簡單應用

通過上面的示例僅僅只是知道三種方法的語法區(qū)別,下面繼續(xù)看看三種方法的具體應用區(qū)別
示例:用類來實現(xiàn)部分計算器功能,并計算任意兩個整數(shù)的平方和

1. 普通方法

class Test:
  def __init__(self, num1, num2):
    self.num1 = num1
    self.num2 = num2
  def plus(self):
    result = self.num1 + self.num2
    return result
  def multiply(self):
    result = self.num1 * self.num2
    return result
t1 = Test(3, 3)
m = t1.multiply()
t2 = Test(4, 4)
n = t2.multiply()
t3 =Test(m, n)
sum = t3.plus()
print(sum)

2. 類方法(@classnethod)

class Test:
  def __init__(self, num1, num2):
    self.num1 = num1
    self.num2 = num2
  def plus(self):
    result = self.num1 + self.num2
    return result
  def multiply(self):
    result = self.num1 * self.num2
    return result
  @classmethod
  def sum(cls, num1, num2):
    t1 = Test(3, 3)
    m = t1.multiply()
    t2 = Test(4, 4)
    n = t2.multiply()
    t3 = Test(m, n)
    print(t3.plus())
Test.sum(3, 4)

3.靜態(tài)方法(@staticmethod)

class Test:
  def __init__(self, num1, num2):
    self.num1 = num1
    self.num2 = num2
  def plus(self):
    result = self.num1 + self.num2
    return result
  def multiply(self):
    result = self.num1 * self.num2
    return result
  @staticmethod
  def sum(num1, num2):
    s = num1 * num1 + num2 * num2
    print(s)
Test.sum(3, 4)

4.總結 

以上三種方法都能實現(xiàn)示例要求的功能。使用類方法時,求和功能的那部分代碼并沒有放在類(Test)中,而是作為類的一個成員方法,這樣的好處是可以簡化對象,增加可讀性(直接通過參數(shù)num1、num2來實現(xiàn)最終功能),但整個過程仍須類(self)參與;使用靜態(tài)方法時,僅僅需要通過傳遞兩個參數(shù)即可實現(xiàn),單最終結果仍可作為類方法進行訪問。

5.延伸

@classmethod裝飾(類方法): 它的作用就是有點像靜態(tài)類,比靜態(tài)類不一樣的就是它可以傳進來一個當前類作為第一個參數(shù)。
@staticmethod裝飾(靜態(tài)方法):經(jīng)常有一些跟類有關系的功能但在運行時又不需要實例和類參與的情況下需要用到靜態(tài)方法。 比如更改環(huán)境變量或者修改其他類的屬性等能用到靜態(tài)方法。這種情況可以直接用函數(shù)解決,但這樣同樣會擴散類內部的代碼,造成維護困難。至于靜態(tài)方法就是寫在類里的方法,必須用類來調用(極少數(shù)情況下使用,一般都在全局里直接寫函數(shù)了)。

看完了這篇文章,相信你對“Python3.0中普通方法、類方法和靜態(tài)方法有什么區(qū)別”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI