Python作為一種高級(jí)編程語(yǔ)言,允許我們使用面向?qū)ο蟮木幊谭绞剑ㄟ^(guò)自定義類和對(duì)象來(lái)解決業(yè)務(wù)問(wèn)題。而類內(nèi)部成員則是類自身定義的一些變量、方法、屬性。在Python中,類內(nèi)部成員包括了3種:
class MyClass: class_var = 0 #類變量 def __init__(self): self.instance_var = 0 #實(shí)例變量 def instance_method(self): print("調(diào)用了實(shí)例方法") @classmethod def class_method(cls): print("調(diào)用了類方法") @staticmethod def static_method(): print("調(diào)用了靜態(tài)方法")
第一種類內(nèi)部成員是類變量,即定義在類內(nèi)部方法外的變量。類變量是所有實(shí)例共享的,也就是說(shuō),當(dāng)一個(gè)實(shí)例的類變量被修改后,其他實(shí)例的類變量也會(huì)發(fā)生變化。
class MyClass: class_var = 0 def __init__(self): MyClass.class_var += 1 self.instance_var = 0 obj1 = MyClass() obj2 = MyClass() obj3 = MyClass() print(MyClass.class_var) #輸出 3
第二種類內(nèi)部成員是實(shí)例變量,即定義在類內(nèi)部方法內(nèi)的變量。實(shí)例變量是每個(gè)實(shí)例對(duì)象獨(dú)有的,在實(shí)例被創(chuàng)建時(shí)初始化,可以通過(guò)self進(jìn)行訪問(wèn)。
class MyClass: def __init__(self): self.instance_var = 0 def set_var(self, var): self.instance_var = var obj = MyClass() obj.set_var(100) print(obj.instance_var) #輸出 100
第三種類內(nèi)部成員是方法,包括了實(shí)例方法、類方法和靜態(tài)方法。
實(shí)例方法是在類內(nèi)定義的函數(shù),可以通過(guò)實(shí)例對(duì)象進(jìn)行調(diào)用。實(shí)例方法的第一個(gè)參數(shù)通常是self,表示當(dāng)前實(shí)例對(duì)象。
class MyClass: def instance_method(self): print("調(diào)用了實(shí)例方法") obj = MyClass() obj.instance_method() #輸出 "調(diào)用了實(shí)例方法"
類方法使用@classmethod裝飾器進(jìn)行定義,第一個(gè)參數(shù)通常是cls,表示當(dāng)前類對(duì)象。類方法可以通過(guò)類對(duì)象和實(shí)例對(duì)象進(jìn)行調(diào)用。
class MyClass: class_var = 0 @classmethod def class_method(cls): cls.class_var += 1 obj1 = MyClass() obj2 = MyClass() MyClass.class_method() obj1.class_method() obj2.class_method() print(MyClass.class_var) #輸出 3
靜態(tài)方法使用@staticmethod裝飾器進(jìn)行定義,不需要傳遞任何參數(shù)。靜態(tài)方法可以通過(guò)類對(duì)象和實(shí)例對(duì)象進(jìn)行調(diào)用。
class MyClass: @staticmethod def static_method(): print("調(diào)用了靜態(tài)方法") obj = MyClass() MyClass.static_method() #輸出 "調(diào)用了靜態(tài)方法" obj.static_method() #輸出 "調(diào)用了靜態(tài)方法"