一、類的成員--變量
在類中變量成員分為兩類:實例變量(字段)和類變量(靜態變量)
(1)實例變量:每一個實例都應該擁有自己的變量,實例變量是給對象用的。
(2)類變量:類變量是屬於類的,只有通過類名調用才能更改類變量的值。
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)#中國 # 類變量的修改只能通過類修改

二、類的成員---方法
1、成員方法(實例方法)
lass Cat: def chi(self): print("貓喜歡吃魚") c=Cat() c.chi()#貓喜歡吃魚
2、靜態方法:類里面定義一個普通的函數(與外部函數一樣)
格式:@staticmethod +函數定義的方法
ss Static( ): @staticmethod def chi():#靜態方法,不需要傳遞self參數,與普通函數一樣 print("我是一個靜態的吃吃") s=Static() s.chi() #我是一個靜態的吃吃
3、類方法:不管是對象還是類訪問該方法,接受到的值都是類
格式:@classmethod +函數定義的方法(cls)
class Class(): @classmethod def say(cls):#第一個位置自動產生一個cls,接受一個類 print(cls) print("我是類方法,我接受的值是類") c=Class() c.say() #<class '__main__.Class'> 我是類方法,我接受的值是類 Class.say() #<class '__main__.Class'> 我是類方法,我接受的值是類
⾯試題: 類⽅法/靜態⽅法和實例⽅法有什么區別?
類方法:一般只由類調用,不推薦用實例調用,有默認傳遞的參數cls,默認傳遞的參數是類;
實例方法:實例方法由實例對象調用,有默認傳遞的參數self,默認參數是對象本身;
靜態方法:可以由類和實例對象調用,沒有默認參數
三、類的成員--屬性
屬性一般在__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
總結;
1、方法參數只有一個self;
2、方法中需要書寫@property;
3、調用的時候,不需要帶括號,直接當成對象的屬性變量來用就可以;
4、這種套路只能取值,不能設置值。
四、私有
私有方法的表示方法:__方法 、__變量、__類
在python中使用__作為方法或者變量的前綴,那么這個方法或者變量就i是一個私有的。
1、私有變量
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'
2、私有方法
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' 報錯
3、私有類和私有靜態方法不再贅述了,與私有的其他的方法一樣
總結:
1、私有方法不能被外部訪問,只能通過內部訪問;
2、無法被繼承。
