# 面向對象編程的三個特色: 封裝, 繼承, 多態 # 封裝:函數是封裝代碼的基本單位,類和對象的封裝屬於更高級的封裝方式, \ # 類中常常聲明一些對象屬性,用來保存數據,在類中聲明的函數操做數據,不一樣功能能夠封裝不一樣的函數 # 繼承特色: # 1子類繼承父類,擁有父類的全部屬性和函數 # 2 子類繼承父類,子類能夠擁有獨屬本身的屬性和函數,但父類不能使用 # 3 子類繼承父類,子類能夠重寫父類函數 # 3.1 徹底重寫:子類從新聲明一個和父類名字相同的函數,並且該函數執行功能和父類的不相同 # 3,2 不徹底重寫:子類從新定義一個和父類函數名同樣的函數,在重寫中調用父類函數,先執行父類函數 # 而後在該函數添加額外功能的代碼 # object 頂級父類,python中全部的類都是直接或者間接繼承自object class People(object): # 初始化函數 def __init__(self, name, age, weight): self.name = name self.age = age self.weight = weight # 對象函數 def sleep(self): print('這是People類中的slepp函數') # 根據工做時間,計算體重是否減小的功能函數 def work_time(self,time): # 若是工做時間在8小時到12小時範圍,體重-2斤 # 若是工做時間超過12小時,體重-5斤 if 8<time<=12: # 體重-2 self.weight -= 2 elif time > 12 : # 體重-5 self.weight -= 5 # 聲明Man類,繼承自People類 class Man(People): # Man類中的初始化函數 def __init__(self, name, age, sex, weight, height): # 調用父類的初始化,將父類中的屬性進行初始化,而且將self對象做爲參數傳遞到父類的初始化函數中 super(Man, self).__init__(name, age, weight) # 初始化當類擁有的屬性 self.sex = sex self.height = height def somking(self): print('這是Man中的smoking函數') # 1.徹底重寫一個sleep函數 def sleep(self): # 在這個sleep函數中,能夠執行和父類中徹底不一樣的功能 print('這是Man類中的sleep函數') # 2.重寫work_time函數 def work_time(self,time): # 2.1 根據時間計算體重 # 先去執行父類中work_time()函數,計算體重 super(Man, self).work_time(time) # 2.2 根據體重 判斷身材是否標準 # 再去添加額外的功能代碼 # 身高 - 105 = 體重 身材標準 # 身高 - 105 > 體重 身材偏瘦 # 身高 - 105 < 體重 身材偏胖 result = self.height - 105 if result > self.weight: print('身材偏瘦') elif result < self.weight: print('身材偏胖') else: print('身材標準') # 建立People對象p1 p1 = People('張三', 22, 180) # p1.sleep() # 執行功能函數 # p1.work_time(13) # print('p1工做以後的體重:%s'%p1.weight) # 父類不可使用子類單獨擁有的屬性和函數 # print(p1.sex) # p1.somking() # 建立Man類的對象 m = Man('李四', 22, '男', 70, 180) # m.sleep() # m在執行work_time函數時,除了要計算體重以外,還要判斷身材是否標準 m.work_time(12) print('m工做以後的體重:%s'%m.weight)
2 類的私有屬性python
# 私有屬性值是有兩個雙下劃線__表示的 # 私有屬性只能在類模塊中調用, class People(object): def __init__(self,name): self.name = name self.__age = 31 ## 若是想要在類聲明的外部獲取私有屬性的屬性值,專門寫一個函數,在函數中將私有屬性值返回,在類聲明外部就能夠調用這個獲取私有屬性值 def get_age(self): # 返回__age的屬性值 return self.__age def set_age(self, value): # 類聲明的範圍內,能夠放私有屬性 self.__age = value ************* 也能夠在外面更改 p1 = People('張三') print(p1._People__age) print('******') p1._People__age = '34' print(p1._People__age) ***************