類中的屬性和方法
我們先來定義一個類:
類屬性
class A(object):
count = 0
print(A.count)
執行結果:
修改代碼:
# a.count = 10
A.count = 100
print('A ,',A.count)
print('a ,',a.count)
執行結果:
此時count = 0
是類屬性,直接在類中定義的屬性是類屬性,類屬性可以通過類或類的實例訪問到,但是類屬性只能通過類對象A.count = 100
來修改,無法通過實例對象a.count = 10
修改。
實例屬性a.count = 10
是實例屬性,通過實例對象添加的屬性屬於實例屬性。
def __init__(self):
self.name = '孫悟空'
print('a ,',a.name)
print('A ,',A.name)
執行結果:
self.name = '孫悟空'
是實例屬性,通過實例對象添加的屬性屬於實例屬性。實例屬性只能通過實例對象來訪問和修改,類對象無法訪問修改。
實例方法
def test(self):
print('這是test方法~~~ ', self)
a = A()
a.test()
執行結果:
在類中定義,以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)
執行結果:
類方法可以通過類去調用,也可以通過實例調用,沒有區別。
a.test_2()
執行結果:
A.test_2()
等價於 a.test_2()
。
靜態方法
在類中使用 @staticmethod 來修飾的方法屬於靜態方法 。
@staticmethod
def test_3():
print('test_3執行了~~~')
a = A()
A.test_3()
a.test_3()
執行結果:
靜態方法不需要指定任何的默認參數,靜態方法可以通過類和實例去調用 。
靜態方法,基本上是一個和當前類無關的方法,它只是一個保存到當前類中的函數。靜態方法一般都是一些工具方法,和當前類無關。
配套視頻課程,點擊這裡查看
獲取更多資源請訂閱Python學習站