成員
在類中寫的全部內容都是類的成員
變量
實例變量: 由對象去訪問的變量函數
1 class Person: 2 def __init__(self,name,birth): 3 self.name = name # 實例變量,對象裏的變量(對象.屬性) 4 self.birth = birth 5 p = Person('bob','1900') 6 print(p.name) 7 print(p.birth) 8 p.birth = 1937 9 print(p.birth) 10 結果 11 bob 12 1900 13 1937
類變量: 變量屬於類,可是對象也能夠訪問學習
1 class Person: 2 country = '中國' 3 def __init__(self,name,birth): 4 self.name = name 5 self.birth = birth 6 p = Person('bob',1937) 7 p2 = Person('jack',2000) 8 print(p.country) 9 print(p2.country) 10 p.country = '法國' 11 print(p.country) 12 print(p2.country) 13 Person.country = '美國' # 類變量最好是使用類名來訪問 14 print(p.country) # 類變量能夠給對象使用 15 print(p2.country) 16 結果 17 中國 18 中國 19 法國 20 中國 21 法國 22 美國
方法
實例方法: 使用 對象.方法()
特色: 在聲明的時候,須要給出self,self必須放在第一個位置,在調用的時候,自動的會把對象傳遞給形參的selfspa
1 class Person: 2 def chi(self): #chi實例方法 3 print('吃飯') 4 在定義實例方法的時候,必須給出一個參數 self 5 形參的第一個參數,自動的把對象給傳遞進來 6 def he(self): #self是當前類的對象 7 print(self) 8 print('喝水') 9 p = Person() 10 p.he() #調用的時候不須要手動給出self 11 print(p) 12 結果 13 <__main__.Person object at 0x000002289B6F72E8> 14 喝水 15 <__main__.Person object at 0x000002289B6F72E8>
類方法 @classmethod : 類方法是屬於類的
特色: 在聲明的時候須要給出一個可以接受類名的參數 cls,也必須放在參數的第一個,在調用的時候,自動得把xx對象的類傳遞給clscode
1 class Person: 2 def chi(self): 3 print('吃飯') 4 @classmethod #類方法 5 def he(cls): # 接收到的cls是類名 6 print('喝水') 7 p = Person() #用對象訪問 8 p.he() #在調用類方法的時候,默認的把類名傳遞給類方法 9 Person.he() # 類方法通常用類名去訪問 10 結果 11 喝水 12 喝水
靜態方法@staticmethod: 靜態方法也是屬於類的,靜態方法就比如,咱們在類中定義了一個函數,靜態方法通常和類方法差很少,使用類名去訪問對象
1 class Person: 2 @staticmethod #靜態方法 3 def chi(): 4 print('吃飯') 5 p = Person #靜態方法能夠使用對象訪問,也能夠使用類名訪問,可是通常推薦使用類名訪問 6 p.chi() 7 Person.chi() #推薦使用類名訪問 8 結果 9 吃飯 10 吃飯
屬性
在方法上添加一個@property,能夠把一個方法變成一個屬性,可是這個屬性不能夠被賦值
當某一個屬性必須通過計算才能獲得結果的時候用blog
1 class Person: 2 def __init__(self,name,birth): 3 self.name = name 4 self.birth = birth 5 # 把一個方法更改爲一個屬性,每次拿屬性的時候都會自動的去執行這個方法 6 # 方法的返回值就是屬性值 7 # 年齡,應該是算出來的,而不是直接存儲 8 @property 9 def age(self): # 實例方法 10 print('方法') 11 return 2018 - self.birth 12 p1 = Person('bob',2000) 13 print(p1.age) #看着像一個變量同樣使用,實際上這裏是調用的一個方法(方法不可修改) 14 結果 15 方法 16 18
私有
全部以雙下劃線開頭的方法,變量都是私有內容,外界沒法訪問,除非你主動暴露這些內容it
1 class Person: 2 __he = '可樂' 3 def __init__(self,name,mimi): 4 self.name = name 5 self.__mimi = mimi # 私有內容,實例變量 6 def shuo(self): 7 print('這個祕密是%s'%self.__mimi) #若是公開就能調用了 8 print(Person.__he) # 私有的類變量只能在類中調用 9 return self.__mimi 10 # 公開了__mimi和__he這個兩個私有變量 11 12 def __wan(self): # 私有的實例方法 13 print('找劉麗玩') 14 @staticmethod 15 def __xiao(): 16 print('劉麗特別愛笑') 17 @classmethod 18 def __xue(cls): 19 print('學習') 20 p = Person('bob','萬物皆空') 21 # print(Person.__he) # 私有類變量只能在類裏面調用(在外調用報錯) 22 # print(p.__mimi) # 私有的類屬性只能在類裏面調用(在外調用報錯) 23 # Person.__xiao() # 私有的類方法只能在類裏面調用(在外調用報錯) 24 p.shuo() 25 結果 26 這個祕密是萬物皆空 27 可樂