#__author:"吉" #date: 2018/10/27 0027 #function: # 設計類: ''' 1 類名:首字母大寫,見名思意 2 屬性:駝峯原則 3 行爲:見名思意,駝峯法 說明:類不佔空間,實例化對象佔用空間! ''' # 格式,object是父類,超類 ''' 類名(object): 屬性 行爲 ''' class Peoson(object): name = 'zhanglei' age = 24 weight = 70 def run(self): print("跑!") def eat(self): print('吃')
#__author:"吉" #date: 2018/10/27 0027 #function: # 設計類: ''' 1 類名:首字母大寫,見名思意 2 屬性:駝峯原則 3 行爲:見名思意,駝峯法 說明:類不佔空間,實例化對象佔用空間! ''' # 格式,object是父類,超類 ''' 類名(object): 屬性 行爲 ''' class Peoson(object): name = 'zhanglei' age = 24 weight = 70 def run(self): print("跑!") def eat(self): print('吃') def changeName(self,name): self.name = name # 實例化對象 ''' 格式:對象名= 類名(參數列表信息) ''' peoson1 = Peoson() print(peoson1.name,peoson1.age,peoson1.weight) print(peoson1.eat()) print(peoson1.run()) # 原理 ''' 變量是在棧區,對象是在堆區。 '''
#__author:"吉" #date: 2018/10/27 0027 #function: # 設計類: ''' 1 類名:首字母大寫,見名思意 2 屬性:駝峯原則 3 行爲:見名思意,駝峯法 說明:類不佔空間,實例化對象佔用空間! ''' # 格式,object是父類,超類 ''' 類名(object): 屬性 行爲 ''' class Peoson(object): name = 'zhanglei' age = 24 weight = 70 def run(self): print("跑!") def eat(self): print('吃') def changeName(self,name): self.name = name # 實例化對象 ''' 格式:對象名= 類名(參數列表信息) ''' peoson1 = Peoson() # 訪問屬性 ''' 變量是在棧區,對象是在堆區。 ''' print(peoson1.name,peoson1.age,peoson1.weight) peoson1.name = 'jiji' peoson1.age = 33 peoson1.weight = 90 print(peoson1.name,peoson1.age,peoson1.weight) peoson1.changeName('lala') print(peoson1.name,peoson1.age,peoson1.weight)
#__author:"吉勇佳" #date: 2018/10/27 0027 #function: ''' 構造函數:__init__() 是在建立類的時候自動調用,不寫出這個 構造函數的話,默認是一個空的構造函數什麼頁不執行。 ''' class Peoson(object): def __init__(self,name,age,height,weight): self.name = name self.age = age self.height = height self.weight = weight def run(self): print("跑!") def eat(self): print('吃') def changeName(self,name): self.name = name # 實例化對象 p1 = Peoson("jiyongjia",24,177,78) print(p1.name,p1.age,p1.height,p1.weight) p1.changeName('zhanglei') print(p1.name,p1.age,p1.height,p1.weight) # self 原理 ''' 一、哪一個對象調用,self就表明那個對象。 '''
class Peoson(object): def __init__(self,name,age,height,weight): self.name = name self.age = age self.height = height self.weight = weight # 這裏是析構函數 def __del__(self): print("我是析構函數") def run(self): print("跑!") def eat(self): print('吃') def changeName(self,name): self.name = name # 建立對象函數 self.__class__ 是表明類名的 def createObj(self,name): p=self.__class__(name,24,56,89) print(p.name,p.age,p.weight,p.height) # 即 執行p1的一個方法便可建立新的對象。 p1 = Peoson("麗麗",33,53,222) print(p1.name,p1.age,p1.height,p1.weight) p1.createObj("狗熊") ''' 輸出:麗麗 33 53 222 狗熊 24 89 56 我是析構函數 我是析構函數 ''' print(p1.name)
''' 重寫 __str__() str方法是給用戶用的,用於返回用戶須要的結果信息、 __repr__() 若是換成__repr__()是獲得與str相同的結果。是在黑屏終端直接敲對象名再回車的方法 注意:在沒有str方法可是有repr的時候,repr 就至關於str,只是repr用於黑屏終端 ''' class Peoson(object): def __init__(self,name,age,height,weight): self.name = name self.age = age self.height = height self.weight = weight # 這裏是析構函數 def __del__(self): print("我是析構函數") def run(self): print("跑!") def eat(self): print('吃') def changeName(self,name): self.name = name # 建立對象函數 self.__class__ 是表明類名的 def createObj(self,name): p=self.__class__(name,24,56,89) print(p.name,p.age,p.weight,p.height) # 若是換成__repr__()是獲得相同的結果。是在黑屏終端直接敲對象名再回車的方法 def __str__(self): pass # return "這裏是str" # return self.name #返回多個值的話用以下 return "%s-%d-%d" % (self.name,self.age,self.weight) # 若是要打印出全部的屬性信息呢? p1 = Peoson("嘉嘉",44,222,336) # 不寫def __str__()方法的時候,打印出的是該對象的地址信息 print(p1) ''' 輸出:<__main__.Peoson object at 0x0000000002564978> ''' # 寫了__str__()函數是 打印出的本身須要返回的信息數據,此時p1等價於p1.__str__() print(p1)
#__author:"吉" #date: 2018/10/27 0027 #function: # 槍設計子彈 設計一次少一個子彈,沒子彈了提示沒法射擊 class Gun(object): def __init__(self,name,bulletNum): self.name = name self.bulletNum = bulletNum def shot(self): self.bulletNum =self.bulletNum - 1 if self.bulletNum+1 != 0: print("此槍型號是:%s,這次射擊成功!子彈減小1發,餘量爲:%d" %(self.name,self.bulletNum)) else: print("*************射擊失敗,子彈數爲0.已經爲您子彈加彈5發!請從新射擊!**************") self.bulletNum = 5 gun = Gun("AK47",5) # 射擊敵人 gun.shot() gun.shot() gun.shot() gun.shot() gun.shot() gun.shot() gun.shot() gun.shot() gun.shot() gun.shot() gun.shot() gun.shot() gun.shot() ''' 輸出: 此槍型號是:AK47,這次射擊成功!子彈減小1發,餘量爲:4 此槍型號是:AK47,這次射擊成功!子彈減小1發,餘量爲:3 此槍型號是:AK47,這次射擊成功!子彈減小1發,餘量爲:2 此槍型號是:AK47,這次射擊成功!子彈減小1發,餘量爲:1 此槍型號是:AK47,這次射擊成功!子彈減小1發,餘量爲:0 *************射擊失敗,子彈數爲0.已經爲您子彈加彈5發!請從新射擊!************** 此槍型號是:AK47,這次射擊成功!子彈減小1發,餘量爲:4 此槍型號是:AK47,這次射擊成功!子彈減小1發,餘量爲:3 此槍型號是:AK47,這次射擊成功!子彈減小1發,餘量爲:2 此槍型號是:AK47,這次射擊成功!子彈減小1發,餘量爲:1 此槍型號是:AK47,這次射擊成功!子彈減小1發,餘量爲:0 *************射擊失敗,子彈數爲0.已經爲您子彈加彈5發!請從新射擊!************** 此槍型號是:AK47,這次射擊成功!子彈減小1發,餘量爲:4 '''
#1 指定私有屬性,在外部沒法更改:即在屬性前加兩個下劃線 如__money
#2 在python中只有某屬性前邊有兩個下劃線的才叫 私有屬性,而__money__這種不叫,這是特殊屬性。
#3 _money 也不是私有屬性,可是當咱們看到這樣的變量時,咱們應該約定俗成的把它看作私有的。本質不是私有,是能夠訪問的。
# 指定私有屬性,在外部沒法更改:即在屬性前加兩個下劃線 如__money class Person(object): def __init__(self,name,age,height,weight,money): self.name = name self.age = age self.height = height self.weight = weight self.__money= money def run(self): print("跑!") def eat(self): print('吃') def changeName(self,name): self.name = name # 建立對象函數 self.__class__ 是表明類名的 def createObj(self,name): p=self.__class__(name,24,56,89,10000) print(p.name,p.age,p.weight,p.height,p.__money) # 即 執行p1的一個方法便可建立新的對象。 p1 = Person("麗麗",33,53,222,20000) print(p1.name,p1.__money) #此處出錯,在外部沒法訪問私有
若是想在外邊訪問的話,能夠把私有的屬性放在方法裏面,調用方法,便可訪問私有屬性。如:python
def run(self):
print("跑!")
print("工資",self.__money)
總結:訪問或者修改私有屬性的時候能夠經過固定的兩個方法來達到修改和訪問,同時,方法中能夠對數據進行過濾。
# 對於處理私有屬性的方法---設置值的方法 def SetMoney(self,money): if money<0: print("輸入的錢不能小於0") else: self.__money = money # 對於訪問私有屬性的方法 def GetMoney(self): return self.__money
# 其實,不能訪問__money的緣由是由於 python把私有的屬性改變爲了 _Person__money ,
# 即仍然是能夠訪問的。可是應該遵循規則,不這麼訪問,
p1._Person__money = 70
print(p1.GetMoney())
上述是依然還能夠把私有屬性進行修改。
父類的文件信息: class People(object): def __init__(self,name,age): self.name=name self.age=age 子類中調用上邊的父類
from people import People
class Student(People):
def __init__(self,name,age,faceValue):
# 繼承父類的__init__()
super(Student,self).__init__(name,age)
self.faceValue = faceValue
stu = Student("玲",22,100)
print(stu.name,stu.age,stu.faceValue)
輸出
玲 22 100編程
# 總結:
# 咱們發現Student類中並沒有這兩個屬性信息,這兩個屬性是調用的父類的__init__中的屬性。
# 總結: # 咱們發現Student類中並沒有這兩個屬性信息,這兩個屬性是調用的父類的__init__中的屬性。