開發與維運

類中屬性和方法 | Python從入門到精通:高階篇之三十四

多態簡介 | Python從入門到精通:高階篇之三十三

類中的屬性和方法

我們先來定義一個類:
類屬性

class A(object):

    count = 0
print(A.count) 

執行結果:

image.png

修改代碼:

# a.count = 10
A.count = 100
print('A ,',A.count) 
print('a ,',a.count) 

執行結果:

image.png
image.png

此時count = 0是類屬性,直接在類中定義的屬性是類屬性,類屬性可以通過類或類的實例訪問到,但是類屬性只能通過類對象A.count = 100來修改,無法通過實例對象a.count = 10修改。
實例屬性
a.count = 10是實例屬性,通過實例對象添加的屬性屬於實例屬性。

    def __init__(self):
        self.name = '孫悟空'

print('a ,',a.name) 
print('A ,',A.name) 

執行結果:

image.png
image.png

self.name = '孫悟空'是實例屬性,通過實例對象添加的屬性屬於實例屬性。實例屬性只能通過實例對象來訪問和修改,類對象無法訪問修改。
實例方法

    def test(self):
        print('這是test方法~~~ ', self) 

a = A()
a.test()

執行結果:

image.png
image.png

在類中定義,以self為第一個參數的方法都是實例方法。實例方法在調用時,Python會將調用對象作為self傳入。
實例方法可以通過實例和類去調用

  • 當通過實例調用時,會自動將當前調用對象作為self傳入
  • 當通過類調用時,不會自動傳遞self,此時我們必須手動傳遞self
# A.test()
A.test(a)

執行結果:

image.pngimage.png

a.test()等價於A.test(a)
類方法
在類內部使用 @classmethod 來修飾的方法屬於類方法

    @classmethod
    def test_2(cls):
        print('這是test_2方法,他是一個類方法~~~ ',cls)

a = A()
A.test_2()        

執行結果:

image.png

類方法的第一個參數是cls,也會被自動傳遞,cls就是當前的類對象。
類方法和實例方法的區別,實例方法的第一個參數是self,而類方法的第一個參數是cls。

        print(cls.count)

執行結果:

image.png

類方法可以通過類去調用,也可以通過實例調用,沒有區別。

a.test_2()

執行結果:

image.png

A.test_2() 等價於 a.test_2()
靜態方法
在類中使用 @staticmethod 來修飾的方法屬於靜態方法 。

    @staticmethod
    def test_3():
        print('test_3執行了~~~')

a = A()

A.test_3()
a.test_3()

執行結果:

image.png

靜態方法不需要指定任何的默認參數,靜態方法可以通過類和實例去調用 。
靜態方法,基本上是一個和當前類無關的方法,它只是一個保存到當前類中的函數。靜態方法一般都是一些工具方法,和當前類無關。

配套視頻課程,點擊這裡查看

獲取更多資源請訂閱Python學習站

Leave a Reply

Your email address will not be published. Required fields are marked *