1. 程式人生 > 程式設計 >Python 靜態方法和類方法例項分析

Python 靜態方法和類方法例項分析

本文例項講述了Python 靜態方法和類方法。分享給大家供大家參考,具體如下:

1. 類屬性、例項屬性

它們在定義和使用中有所區別,而最本質的區別是記憶體中儲存的位置不同,

例項屬性屬於物件

類屬性屬於類

class Province(object):
  # 類屬性
  country = '中國'
  def __init__(self,name):
    # 例項屬性
    self.name = name
# 建立一個例項物件
obj = Province('山東省')
# 直接訪問例項屬性
print(obj.name)
# 直接訪問類屬性
Province.country

由上述程式碼可以看出【例項屬性需要通過物件來訪問】【類屬性通過類訪問】,在使用上可以看出例項屬性和類屬性的歸屬是不同的。

其在內容的儲存方式類似如下圖:

由上圖看出:

類屬性在記憶體中只儲存一份

例項屬性在每個物件中都要儲存一份

應用場景:

通過類建立例項物件時,如果每個物件需要具有相同名字的屬性,那麼就使用類屬性,用一份既可

2. 例項方法、靜態方法和類方法

方法包括:例項方法、靜態方法和類方法,三種方法在記憶體中都歸屬於類,區別在於呼叫方式不同。

例項方法:由物件呼叫;至少一個self引數;執行例項方法時,自動將呼叫該方法的物件賦值給self;

類方法:由類呼叫; 至少一個cls引數;執行類方法時,自動將呼叫該方法的類賦值給cls;

靜態方法:由類呼叫;無預設引數;

class Foo(object):
  def __init__(self,name):
    self.name = name
  def ord_func(self):
    """ 定義例項方法,至少有一個self引數 """
    # print(self.name)
    print('例項方法')
  @classmethod
  def class_func(cls):
    """ 定義類方法,至少有一個cls引數 """
    print('類方法')
  @staticmethod
  def static_func():
    """ 定義靜態方法 ,無預設引數"""
    print('靜態方法')
f = Foo("中國")
# 呼叫例項方法
f.ord_func()
# 呼叫類方法
Foo.class_func()
# 呼叫靜態方法
Foo.static_func()

對比

相同點:對於所有的方法而言,均屬於類,所以 在記憶體中也只儲存一份

不同點:方法呼叫者不同、呼叫方法時自動傳入的引數不同。

更多關於Python相關內容感興趣的讀者可檢視本站專題:《Python面向物件程式設計入門與進階教程》、《Python資料結構與演算法教程》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》、《Python編碼操作技巧總結》及《Python入門與進階經典教程》

希望本文所述對大家Python程式設計有所幫助。