Python面向對象編程從零開始(5)—— 小姐姐要買房
前言
前文傳送門:
Python面向對象編程從零開始(1)——從沒對象到有對象:https://ask.hellobi.com/blog/wangdawei/8429
Python面向對象編程從零開始(2)—— 與對象相互了解:https://ask.hellobi.com/blog/wangdawei/8446
Python面向對象編程從零開始(3)—— 小姐姐請客上篇:https://ask.hellobi.com/blog/wangdawei/8463
Python面向對象編程從零開始(4)—— 小姐姐請客下篇:https://ask.hellobi.com/blog/wangdawei/8478
分割線---------------------------------------------------------------------------------------------
好幾天沒連載了,最近工作學習忙啊,下周去西安找小姐姐玩一周,考慮要不要帶著電腦繼續連載呢~
上一次講到小姐姐請客吃飯,結果請我吃泡麵。。。。。。
小姐姐要買房!%s%d 的使用
今天,小姐姐和我說要買房,what?,還是在上海買!等等,在人民廣場買。。
你們隨意感受一下上海的房價,人民廣場在上海黃浦區。。。
既然要買房,那就買吧
class Home:n def __init__(self,new_area,new_info,new_addr):n self.area = new_arean self.info = new_infon self.addr = new_addrn n def __str__(self):n return 房子的面積是:%d,戶型是:%s,地址是:%s%(self.area,self.info,self.addr)n nfangzi = Home(120,三室一廳,上海市 黃浦區 人民大道 666號)nprint(fangzi)n
看一下運行結果:
在這裡,先定義了一個類,類名為Home
在類中,先定義了一個__init__()方法,用來初始化房子的area、information、address(在方法中定義了三個屬性)
然後定義了一個__str__()方法,用來做輸出,輸出房子的area、information、address
注意:我們首先講一下這個輸出格式,舉個例子幫助理解一下。
print(小姐姐名叫:%s%王夢瑤)n
%s表示傳遞的是string字元串
%d表示傳遞的是整型十進位
例如:
print(王夢瑤的BWH是:%d,%d,%d%(80,57,91))n
咳咳,也就是說,當傳遞多個參數輸出時,統一在後面加括弧,再在之前加%
添置傢具,實現動態顯示佔用空間
首先,當然是要買個床!雙人床!
所以定義一個類
class Furniture:n def __init__(self,new_name,new_area):n self.name = new_namen self.area = new_arean
床的名稱和床的尺寸~~~~~
然後定義一個床的佔用面積:
def __str__(self):n return %s佔用的面積是:%d%(self.name,self.area)n
然後我創建一個對象(買了一個雙人豪華大床)
bed1 = Furniture(雙人豪華大床,6)nprint(bed1)n
運行得到結果:
意思是這個床佔用面積是6平方米,果然很大!
總體代碼如下:
class Home:n def __init__(self,new_area,new_info,new_addr):n self.area = new_arean self.info = new_infon self.addr = new_addrn n def __str__(self):n return 房子的面積是:%d,戶型是:%s,地址是:%s%(self.area,self.info,self.addr)nnclass Furniture:n def __init__(self,new_name,new_area):n self.name = new_namen self.area = new_arean n def __str__(self):n return %s佔用的面積是:%d%(self.name,self.area)n nfangzi = Home(120,三室一廳,上海市 黃浦區 人民大道 666號)nprint(fangzi)nnbed1 = Furniture(雙人豪華大床,6)nprint(bed1)n
當然除了在卧室,還可以在廚房,浴室,陽台,客廳。。。
等地方添置傢具(聽說留一段空白可以引人遐想)
合理顯示剩餘空間
暫且不考慮房間布局,首先,我們知道傢具是存在的,所以它們是佔用空間的。
房子就這麼大,存放的傢具是有限的,所以傢具的佔用面積之和不能超過房間總面積(你要是告訴我空調是掛式的不是落地的所以不佔用地面空間的話)
我。。。。就假設房間是二維的吧,就像宣傳房子戶型的宣傳單上畫的
那怎麼實現這個功能呢?
首先,我們對Home類進行修改:
class Home:n def __init__(self,new_area,new_info,new_addr):n self.area = new_arean self.info = new_infon self.addr = new_addrn self.left_area = new_area n self.contain_items = []#保存物品的名字n
添加剩餘空間和包含的物品的屬性
然後,修改__init__()方法:
def __str__(self):n msg = 房子的總面積是:%d,可用面積是:%d,戶型是:%s,地址是:%s%(self.area,self.left_area,self.info,self.addr)n msg += 當前房子里的物品有%s%(str(self.contain_items))n return msgn
用msg保存信息,並添加可用面積輸出,並每次加上房間中的總物品清單
注意:因為self.contain_items是列表,要轉化為str字元串輸出,所以要強制轉換類型 str(self.contain_items)
在Home類中新加add_item方法
def add_item(self,item):n self.left_area -= item.area #item.area獲取對象的屬性,傢具佔用空間n self.contain_items.append(item.name)n
調用時可以從當前空間減去傢具佔用的空間得到剩餘空間,並且可以加上新增加的傢具信息
所以,我們可以得到總的代碼如下:
class Home:n def __init__(self,new_area,new_info,new_addr):n self.area = new_arean self.info = new_infon self.addr = new_addrn self.left_area = new_area n self.contain_items = []#保存物品的名字n n def __str__(self):n msg = 房子的總面積是:%d,可用面積是:%d,戶型是:%s,地址是:%s%(self.area,self.left_area,self.info,self.addr)n msg += 當前房子里的物品有%s%(str(self.contain_items))n return msgn n def add_item(self,item):n self.left_area -= item.area #item.area獲取對象的屬性,傢具佔用空間n self.contain_items.append(item.name)n nclass Furniture:n def __init__(self,new_name,new_area):n self.name = new_namen self.area = new_arean n def __str__(self):n return %s佔用的面積是:%d%(self.name,self.area)n nfangzi = Home(120,三室一廳,上海市 黃浦區 人民大道 666號)nprint(fangzi)nnbed1 = Furniture(雙人豪華大床,6)nprint(bed1)nnfangzi.add_item(bed1)nprint(fangzi)nnaircondition = Furniture(立式空調,1)nfangzi.add_item(aircondition)nprint(fangzi)n
我依次添加了床和空調進去
結果顯示
這樣就完成了房間剩餘空間的顯示啦!
小姐姐對我的技術表示很滿意
(聽說留一段空白可以引人遐想)
想繼續邊聽講故事邊零基礎學習Python面向對象編程么,請持續關注連載~
作者:王大偉 Python愛好者社區唯一小編,請勿轉載,謝謝。
出處:Python面向對象編程從零開始(5)-- 小姐姐要買房配套視頻教程:Python3爬蟲三大案例實戰分享:貓眼電影、今日頭條街拍美圖、淘寶美食 Python3爬蟲三大案例實戰分享 公眾號:Python愛好者社區(微信ID:python_shequ),關注,查看更多連載內容。加小編個人微信:tsdatajob ,跟作者互動,一起探討。
推薦閱讀: