Python的類實例方法,類方法,類靜態方法


以下面的類定義為例:

# coding:utf-8

class A:
    count = 0
    def __init__(self, inst_name):
        self.inst_name = inst_name
        self.__class__.count += 1
    def inst_method(self):
        print '實例(%s):%s' % (self.__class__.count, self.inst_name)
    @classmethod
    def class_method(cls):
        print cls.count
    @staticmethod
    def static_method():
        print 'hello'
a1,a2,a3,a4 = A('a1'),A('a2'),A('a3'),A('a4')
a1.inst_method()
a1.class_method() # 或 A.class_method()
a1.static_method() # 或 A.static_method()

類實例方法:第一個參數強制為類實例對象,可以通過這個類實例對象訪問類屬性,可以通過類實例對象的__class__屬性訪問類屬性。

def inst_method(self):
    print '實例(%s):%s' % (self.__class__.count, self.inst_name)

類實例方法不需要標注,第一個參數必不可少,解析器自動會將類實例對象傳給方法的第一個參數。

類的初始化方法__init__也是實例方法,在實例創建的時候自動調用。在這里每當初始化一個實例,就通過__class__來訪問類屬性count,是它加一,用來統計類的實例數。

def __init__(self, inst_name):
    self.inst_name = inst_name
    self.__class__.count += 1

類方法:第一個參數強制為類對象,可以通過這個類對象訪問類屬性,由於沒有傳入類實例對象,所以不能訪問類實例屬性。

@classmethod
def class_method(cls):
    print cls.count

類方法需要使用classmethod標注,第一個參數必不可少,解析器自動會將類對象傳給方法的第一個參數。

類靜態方法:無法訪問類屬性、類實例屬性、沒有默認的第一個參數,其實跟類沒什么關系,只是綁定在類命名空間下的函數而已。

@staticmethod
def static_method():
    print 'hello'

類靜態方法通常用來定義一些和類主題相關的函數。

通過類對象可以調用類方法、類靜態方法,但不可以調用類實例方法;通過類實例對象可以調用以上三種方法

a1,a2,a3,a4 = A('a1'),A('a2'),A('a3'),A('a4')
a1.inst_method()
a1.class_method() # 或 A.class_method()
a1.static_method() # 或 A.static_method()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM