1、類的成員--變量python
在類中變量成員分爲兩類:實例變量(字段)和類變量(靜態變量)函數
(1)實例變量:每個實例都應該擁有本身的變量,實例變量是給對象用的。spa
(2)類變量:類變量是屬於類的,只有經過類名調用才能更改類變量的值。code
class Person: coutry="中國" #在此處申明類變量 def __init__(self,name ,age): #構造方法,在此處聲明實例化變量 self.name=name #實例變量 self.age=age # Person.coutry="大慶" #經過類 修改類變量 mt=Person("馬化騰",18) mt.company="騰訊" #添加實例變量 mt.coutry="大慶" #即便類變量中存在country,對象不能直接對類變量修改,只會在本身對象中添加實例化變量 print(mt.age) #18 print(mt.company)#騰旭 print(mt.coutry) #對象.變量 :尋找的方法,首先如今對象的屬性中尋找,若是找到直接,中止尋找,並返回,不然繼續向類變量尋找 al=Person("曹操",135) print(al.age) #135 print(al.coutry)#中國 # 類變量的修改只能經過類修改
2、類的成員---方法對象
一、成員方法(實例方法)blog
lass Cat: def chi(self): print("貓喜歡吃魚") c=Cat() c.chi()#貓喜歡吃魚
二、靜態方法:類裏面定義一個普通的函數(與外部函數同樣)繼承
格式:@staticmethod +函數定義的方法ip
ss Static( ): @staticmethod def chi():#靜態方法,不須要傳遞self參數,與普通函數同樣 print("我是一個靜態的吃吃") s=Static() s.chi() #我是一個靜態的吃吃
三、類方法:無論是對象仍是類訪問該方法,接受到的值都是類it
格式:@classmethod +函數定義的方法(cls)io
class Class(): @classmethod def say(cls):#第一個位置自動產生一個cls,接受一個類 print(cls) print("我是類方法,我接受的值是類") c=Class() c.say() #<class '__main__.Class'> 我是類方法,我接受的值是類 Class.say() #<class '__main__.Class'> 我是類方法,我接受的值是類
⾯試題: 類⽅法/靜態⽅法和實例⽅法有什麼區別?
類方法:通常只由類調用,不推薦用實例調用,有默認傳遞的參數cls,默認傳遞的參數是類;
實例方法:實例方法由實例對象調用,有默認傳遞的參數self,默認參數是對象自己;
靜態方法:能夠由類和實例對象調用,沒有默認參數
3、類的成員--屬性
屬性通常在__init__(self)中建立,可是有時候咱們的屬性須要計算,這個時候屬性就不能直接在___init__中聲明,此實須要利用函數的屬性化。
函數屬性化:把公式轉換爲屬性
格式:@property +函數定義的方法
etime #插入時間模塊 class Person: def __init__(self,name,birthday,email): self.name=name self.birthday=birthday self.email=email # 要求須要定義一個age屬性 @property #把方法轉換爲屬性,對象屬性的書寫,self.age def age(self): #方法中只有一個參數self now_time = int(datetime.datetime.now().strftime("%Y"))#獲取當前的年的數值:2018 return now_time-int(self.birthday.strip().split("-")[0]) #2018-1014 c=Person("小雞","2014-10-15","123a46@qq.com") print(c.age) #c.age 獲得年齡屬性 結果:4
總結;
一、方法參數只有一個self;
二、方法中須要書寫@property;
三、調用的時候,不須要帶括號,直接當成對象的屬性變量來用就能夠;
四、這種套路只能取值,不能設置值。
4、私有
私有方法的表示方法:__方法 、__變量、__類
在python中使用__做爲方法或者變量的前綴,那麼這個方法或者變量就i是一個私有的。
一、私有變量
Person:
def __init__(self,name,laopo,):
self.name=name
self.__laopo=laopo#私有變量,老婆是本身的別人不能用
def look(self):
print(self.__laopo)
r=Person("周杰倫","崑崙")
r.look() #經過內部函數訪問 崑崙
print(r.__laopo)#type object 'Person' has no attribute '__laopo'
二、私有方法
class Yue: def __yue(self): print("我要出去約約約") def chi(self): print("吃什麼") def __play(self): print("玩什麼") r=Yue() r.chi() r.__yue() #'Yue' object has no attribute '__yue' 報錯 r.__play #'Yue' object has no attribute '__play' 報錯
三、私有類和私有靜態方法再也不贅述了,與私有的其餘的方法同樣
總結:
一、私有方法不能被外部訪問,只能經過內部訪問;
二、沒法被繼承。