天天看點

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

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

類中的屬性和方法

我們先來定義一個類:

類屬性

class A(object):

    count = 0
print(A.count)            

執行結果:

修改代碼:

# a.count = 10
A.count = 100
print('A ,',A.count) 
print('a ,',a.count)            
類中屬性和方法 | Python從入門到精通:高階篇之三十四

此時

count = 0

是類屬性,直接在類中定義的屬性是類屬性,類屬性可以通過類或類的執行個體通路到,但是類屬性隻能通過類對象

A.count = 100

來修改,無法通過執行個體對象

a.count = 10

修改。

執行個體屬性

a.count = 10

是執行個體屬性,通過執行個體對象添加的屬性屬于執行個體屬性。

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

print('a ,',a.name) 
print('A ,',A.name)            
類中屬性和方法 | Python從入門到精通:高階篇之三十四

self.name = '孫悟空'

是執行個體屬性,通過執行個體對象添加的屬性屬于執行個體屬性。執行個體屬性隻能通過執行個體對象來通路和修改,類對象無法通路修改。

執行個體方法

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

a = A()
a.test()           
類中屬性和方法 | Python從入門到精通:高階篇之三十四
類中屬性和方法 | Python從入門到精通:高階篇之三十四

在類中定義,以self為第一個參數的方法都是執行個體方法。執行個體方法在調用時,Python會将調用對象作為self傳入。

執行個體方法可以通過執行個體和類去調用

  • 當通過執行個體調用時,會自動将目前調用對象作為self傳入
  • 當通過類調用時,不會自動傳遞self,此時我們必須手動傳遞self
# A.test()
A.test(a)           

a.test()

等價于

A.test(a)

類方法

在類内部使用 @classmethod 來修飾的方法屬于類方法

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

a = A()
A.test_2()                   

類方法的第一個參數是cls,也會被自動傳遞,cls就是目前的類對象。

類方法和執行個體方法的差別,執行個體方法的第一個參數是self,而類方法的第一個參數是cls。

print(cls.count)           
類中屬性和方法 | Python從入門到精通:高階篇之三十四

類方法可以通過類去調用,也可以通過執行個體調用,沒有差別。

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

A.test_2()

a.test_2()

靜态方法

在類中使用 @staticmethod 來修飾的方法屬于靜态方法 。

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

a = A()

A.test_3()
a.test_3()           
類中屬性和方法 | Python從入門到精通:高階篇之三十四

靜态方法不需要指定任何的預設參數,靜态方法可以通過類和執行個體去調用 。

靜态方法,基本上是一個和目前類無關的方法,它隻是一個儲存到目前類中的函數。靜态方法一般都是一些工具方法,和目前類無關。

配套視訊課程,點選這裡檢視

擷取更多資源請訂閱

Python學習站