python面向對象之成員
阿新 • • 發佈:2018-12-30
code 聲明 函數 兩個 method 公開 init property 結果
成員
在類中寫的所有內容都是類的成員
變量
實例變量: 由對象去訪問的變量
class Person: def __init__(self,name,birth): self.name = name # 實例變量,對象裏的變量(對象.屬性) self.birth = birth p = Person(‘bob‘,‘1900‘) print(p.name) print(p.birth) p.birth = 1937 print(p.birth) 結果 bob 1900 1937
類變量: 變量屬於類,但是對象也可以訪問
class Person: country= ‘中國‘ def __init__(self,name,birth): self.name = name self.birth = birth p = Person(‘bob‘,1937) p2 = Person(‘jack‘,2000) print(p.country) print(p2.country) p.country = ‘法國‘ print(p.country) print(p2.country) Person.country = ‘美國‘ # 類變量最好是使用類名來訪問 print(p.country) # 類變量可以給對象使用print(p2.country) 結果 中國 中國 法國 中國 法國 美國
方法
實例方法: 使用 對象.方法()
特點: 在聲明的時候,需要給出self,self必須放在第一個位置,在調用的時候,自動的會把對象傳遞給形參的self
class Person: def chi(self): #chi實例方法 print(‘吃飯‘) 在定義實例方法的時候,必須給出一個參數 self 形參的第一個參數,自動的把對象給傳遞進來 def he(self): #self是當前類的對象 print(self) print(‘喝水‘) p = Person() p.he() #調用的時候不需要手動給出self print(p) 結果 <__main__.Person object at 0x000002289B6F72E8> 喝水 <__main__.Person object at 0x000002289B6F72E8>
類方法 @classmethod : 類方法是屬於類的
特點: 在聲明的時候需要給出一個能夠接受類名的參數 cls,也必須放在參數的第一個,在調用的時候,自動得把xx對象的類傳遞給cls
class Person: def chi(self): print(‘吃飯‘) @classmethod #類方法 def he(cls): # 接收到的cls是類名 print(‘喝水‘) p = Person() #用對象訪問 p.he() #在調用類方法的時候,默認的把類名傳遞給類方法 Person.he() # 類方法一般用類名去訪問 結果 喝水 喝水
靜態方法@staticmethod: 靜態方法也是屬於類的,靜態方法就好比,我們在類中定義了一個函數,靜態方法一般和類方法差不多,使用類名去訪問
class Person: @staticmethod #靜態方法 def chi(): print(‘吃飯‘) p = Person #靜態方法可以使用對象訪問,也可以使用類名訪問,但是一般推薦使用類名訪問 p.chi() Person.chi() #推薦使用類名訪問 結果 吃飯 吃飯
屬性
在方法上添加一個@property,可以把一個方法變成一個屬性,但是這個屬性不可以被賦值
當某一個屬性必須經過計算才能得到結果的時候用
class Person: def __init__(self,name,birth): self.name = name self.birth = birth # 把一個方法更改成一個屬性,每次拿屬性的時候都會自動的去執行這個方法 # 方法的返回值就是屬性值 # 年齡,應該是算出來的,而不是直接存儲 @property def age(self): # 實例方法 print(‘方法‘) return 2018 - self.birth p1 = Person(‘bob‘,2000) print(p1.age) #看著像一個變量一樣使用,實際上這裏是調用的一個方法(方法不可修改) 結果 方法 18
私有
所有以雙下劃線開頭的方法,變量都是私有內容,外界無法訪問,除非你主動暴露這些內容
class Person: __he = ‘可樂‘ def __init__(self,name,mimi): self.name = name self.__mimi = mimi # 私有內容,實例變量 def shuo(self): print(‘這個秘密是%s‘%self.__mimi) #如果公開就能調用了 print(Person.__he) # 私有的類變量只能在類中調用 return self.__mimi # 公開了__mimi和__he這個兩個私有變量 def __wan(self): # 私有的實例方法 print(‘找劉麗玩‘) @staticmethod def __xiao(): print(‘劉麗特別愛笑‘) @classmethod def __xue(cls): print(‘學習‘) p = Person(‘bob‘,‘萬物皆空‘) # print(Person.__he) # 私有類變量只能在類裏面調用(在外調用報錯) # print(p.__mimi) # 私有的類屬性只能在類裏面調用(在外調用報錯) # Person.__xiao() # 私有的類方法只能在類裏面調用(在外調用報錯) p.shuo() 結果 這個秘密是萬物皆空 可樂
python面向對象之成員