標籤:

Python面向對象編程從零開始(5)—— 小姐姐要買房n...

前言

前文傳送門:

Python面向對象編程從零開始(1)——從沒對象到有對象:ask.hellobi.com/blog/wa

Python面向對象編程從零開始(2)—— 與對象相互了解:ask.hellobi.com/blog/wa

Python面向對象編程從零開始(3)—— 小姐姐請客上篇:ask.hellobi.com/blog/wa

Python面向對象編程從零開始(4)—— 小姐姐請客下篇:ask.hellobi.com/blog/wa

分割線---------------------------------------------------------------------------------------------

好幾天沒連載了,最近工作學習忙啊,下周去西安找小姐姐玩一周,考慮要不要帶著電腦繼續連載呢~

上一次講到小姐姐請客吃飯,結果請我吃泡麵。。。。。。

小姐姐要買房!%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%王夢瑤)

%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面向對象編程從零開始(5)-- 小姐姐要買房

推薦閱讀:

如何高效學習並掌握現代C++?
把函數式編程語言寫得和彙編一樣是一番怎樣的感受?
Git筆記——基本功能(上)

TAG:Python | 编程 |