如何添加類屬性和類方法,修改類私有屬性
2018-10-26 11:42:24

類屬性、定義類方法、類實例化、屬性初始化、self參數、類的私有變量的個人學習筆記
直接上實例:
1 class player: 2 def __init__(self,name,hp,occupation): 3 self.name = name 4 self.hp = hp 5 self.occupation = occupation 6 def print_role(self): 7 print("%s %s %s"%(self.name,self.hp,self.occupation)) 8 #類實例化 9 player01 = player('will','2000','warror') 10 player02 = player('jine','2500','mage') 11 #調用類方法 12 player01.print_role() 13 player02.print_role()
- 第一步:簡單介紹一下類,創建一個類名用class + 類名 + 英文冒號。
- 第二步:def __init__(self,屬性名1,屬性名2,屬性名3.....)是一個構造函數,表示類屬性的默認值和屬性的初始化,self是類的第一個參數,這個參數是類實例本身,后面若干個類的屬性名。
- 第三步:定義類方法,注意類方法的第一個參數必須是self,也就是類實例本身。這個類方法是打印玩家的屬性信息。
- 第四步:類實例化,把帶參數的類復制給一個變量,然后我們就可以通過這個變量進行操作,調用查看實例的類方法和類屬性。
打印結果如下:

那么如何添加類屬性並修改屬性呢:
1 #添加類屬性 2 print('****************************************************') 3 class player: 4 def __init__(self,name,hp,occupation,power): 5 self.name = name 6 self.hp = hp 7 self.occupation = occupation 8 self.power = power #給類添加屬性 9 def print_role(self): 10 print("%s %s %s %s"%(self.name,self.hp,self.occupation,self.power)) 11 def update(self,new_hp): 12 self.hp = new_hp 13 player3 = player('tom','3000','warror','150') 14 player3.print_role() #打印人物初始默認值。 15 player3.update('1000') #調用方法,修改類屬性(hp血量值) 16 player3.print_role() #調用打印方法,對比初始,檢查hp是否改變 17 #綜上所述,我們通過添加類方法,並在類方法中通過傳遞新的參數修改已有的屬性。當然我們也可以在實例化后修改,不過如果屬性若為私有屬性,則實例化后修改屬性行不通 18 player3.name = 'Jines' #在實例中,類外面修改類屬性也可以,但這種方法僅限於非私有屬性 19 player3.print_role() 20 print('=======================================================')
第一、從上面源碼中,我們可以看出,只需在構造函數中,也就是__init__()函數中,添加形參,並且創建一個新的self.power變量(名字隨意,這里只是舉例,),並將形參賦值給self.power,然后我們在實例化中,添加對應的實參就可以完成添加一個新的類屬性。
第二、如何修改參數,上面代碼中提供了兩種方法,一種是在類中,通過定義新方法修改,另一種是在實例化后,修改實例的屬性。這兩種方法都可以實現修改類屬性。
執行結果:

從上面可以看出,兩種方法都可以修改類的屬性。
但是,如果類的屬性是私有屬性,那通過修改實例化后的屬性就無法實現修改屬性了。但另一種方法通過定義一個新的方法,在新的的方法中修改私有變量是可以實現的。
源碼如下:
1 #私有屬性,只要在屬性前面加雙下划線__ 2 class player: 3 def __init__(self,name,hp,occupation,power): 4 self.__name = name 5 self.hp = hp 6 self.occupation = occupation 7 self.power = power #給類添加屬性 8 def print_role(self): 9 print("%s %s %s %s"%(self.__name,self.hp,self.occupation,self.power)) 10 def update(self,new_name): 11 self.__name = new_name 12 player4 = player('tom','3000','warror','150') 13 player4.print_role() 14 player4.name = 'Pole' 15 player4.print_role() #通過類型外修改類私有屬性,很明顯不可以,只有通過類方法修改類屬性 16 print('$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$') 17 player4.update('Machel') #通過輸出結果可見,成功修改了私有變量,注意一點,私有變量修改,類中所有要修私有屬性的self.attribute應對應改成self.__attribute 18 player4.print_role()
執行結果:

從上面可以看出我們通過實例修改私有變量,輸出結果仍是初始化的狀態,並沒有改變,但通過調用類方法修改類屬性的值卻是實現了。
