python面向對象之成員

成員
在類中寫的全部內容都是類的成員

變量
實例變量: 由對象去訪問的變量函數

複製代碼
 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 可樂
相關文章
相關標籤/搜索