查看原文
其他

Python面向对象编程从零开始(5)—— 小姐姐要买房

2017-06-14 王大伟 Python爱好者社区

(点击上方Python爱好者社区,可快速关注)

作者:王大伟

博客专栏:https://www.hellobi.com/u/wangdawei/articles

Python爱好者社区  唯一小编  

(文末有新福利 

前言

前文传送门:

Python面向对象编程从零开始(1)——从没对象到有对象

Python面向对象编程从零开始(2)—— 与对象相互了解

Python面向对象编程从零开始(3)—— 小姐姐请客上篇

Python面向对象编程从零开始(4)—— 小姐姐请客下篇

分割线-----------------------------------------------------------------

好几天没连载了,最近工作学习忙啊,下周去西安找小姐姐玩一周,考虑要不要带着电脑继续连载呢~

上一次讲到小姐姐请客吃饭,结果请我吃泡面。。。。。。



小姐姐要买房!%s%d 的使用

今天,小姐姐和我说要买房,what?,还是在上海买!等等,在人民广场买。。


你们随意感受一下上海的房价,人民广场在上海黄浦区。。。

既然要买房,那就买吧

  

class Home:
   def __init__(self,new_area,new_info,new_addr):
       self.area = new_area
       self.info = new_info
       self.addr = new_addr
   
   def __str__(self):
       return '房子的面积是:%d,户型是:%s,地址是:%s'%(self.area,self.info,self.addr)
       
fangzi = Home(120,'三室一厅','上海市 黄浦区 人民大道 666号')
print(fangzi)

看一下运行结果:


在这里,先定义了一个类,类名为Home

在类中,先定义了一个__init__()方法,用来初始化房子的area、information、address(在方法中定义了三个属性)

然后定义了一个__str__()方法,用来做输出,输出房子的area、information、address

注意:我们首先讲一下这个输出格式,举个例子帮助理解一下。

print('小姐姐名叫:%s'%'王梦瑶')


%s表示传递的是string字符串

%d表示传递的是整型十进制

例如:

print('王梦瑶的BWH是:%d,%d,%d'%(80,57,91))


咳咳,也就是说,当传递多个参数输出时,统一在后面加括号,再在之前加%



添置家具,实现动态显示占用空间

首先,当然是要买个床!双人床!

所以定义一个类

class Furniture:
   def __init__(self,new_name,new_area):
       self.name = new_name
       self.area = new_area

床的名称和床的尺寸~~~~~

然后定义一个床的占用面积:

   def __str__(self):
       return '%s占用的面积是:%d'%(self.name,self.area)

然后我创建一个对象(买了一个双人豪华大床)

bed1 = Furniture('双人豪华大床',6)
print(bed1)

运行得到结果:


意思是这个床占用面积是6平方米,果然很大!

总体代码如下:

class Home:
   def __init__(self,new_area,new_info,new_addr):
       self.area = new_area
       self.info = new_info
       self.addr = new_addr
   
   def __str__(self):
       return '房子的面积是:%d,户型是:%s,地址是:%s'%(self.area,self.info,self.addr)

class Furniture:
   def __init__(self,new_name,new_area):
       self.name = new_name
       self.area = new_area
       
   def __str__(self):
       return '%s占用的面积是:%d'%(self.name,self.area)
   
fangzi = Home(120,'三室一厅','上海市 黄浦区 人民大道 666号')
print(fangzi)

bed1 = Furniture('双人豪华大床',6)
print(bed1)



当然除了在卧室,还可以在厨房,浴室,阳台,客厅。。。









等地方添置家具(听说留一段空白可以引人遐想)

合理显示剩余空间

暂且不考虑房间布局,首先,我们知道家具是存在的,所以它们是占用空间的。

房子就这么大,存放的家具是有限的,所以家具的占用面积之和不能超过房间总面积(你要是告诉我空调是挂式的不是落地的所以不占用地面空间的话)

我。。。。就假设房间是二维的吧,就像宣传房子户型的宣传单上画的


那怎么实现这个功能呢?

首先,我们对Home类进行修改:

class Home:
   def __init__(self,new_area,new_info,new_addr):
       self.area = new_area
       self.info = new_info
       self.addr = new_addr
       self.left_area = new_area
       self.contain_items = []#保存物品的名字

添加剩余空间和包含的物品的属性

然后,修改__init__()方法:

   def __str__(self):
       msg = '房子的总面积是:%d,可用面积是:%d,户型是:%s,地址是:%s'%(self.area,self.left_area,self.info,self.addr)
       msg += '当前房子里的物品有%s'%(str(self.contain_items))
       return msg

用msg保存信息,并添加可用面积输出,并每次加上房间中的总物品清单

注意:因为self.contain_items是列表,要转化为str字符串输出,所以要强制转换类型 str(self.contain_items)

在Home类中新加add_item方法

def add_item(self,item):
   self.left_area -= item.area #item.area获取对象的属性,家具占用空间
   self.contain_items.append(item.name)

调用时可以从当前空间减去家具占用的空间得到剩余空间,并且可以加上新增加的家具信息

所以,我们可以得到总的代码如下:

class Home:
   def __init__(self,new_area,new_info,new_addr):
       self.area = new_area
       self.info = new_info
       self.addr = new_addr
       self.left_area = new_area
       self.contain_items = []#保存物品的名字
   
   def __str__(self):
       msg = '房子的总面积是:%d,可用面积是:%d,户型是:%s,地址是:%s'%(self.area,self.left_area,self.info,self.addr)
       msg += '当前房子里的物品有%s'%(str(self.contain_items))
       return msg
       
   def add_item(self,item):
       self.left_area -= item.area #item.area获取对象的属性,家具占用空间
       self.contain_items.append(item.name)
   
class Furniture:
   def __init__(self,new_name,new_area):
       self.name = new_name
       self.area = new_area
       
   def __str__(self):
       return '%s占用的面积是:%d'%(self.name,self.area)
   
fangzi = Home(120,'三室一厅','上海市 黄浦区 人民大道 666号')
print(fangzi)

bed1 = Furniture('双人豪华大床',6)
print(bed1)

fangzi.add_item(bed1)
print(fangzi)

aircondition = Furniture('立式空调',1)
fangzi.add_item(aircondition)
print(fangzi)

我依次添加了床和空调进去

结果显示:



这样就完成了房间剩余空间的显示啦!

小姐姐对我的技术表示很满意






(听说留一段空白可以引人遐想)


想继续边听讲故事边零基础学习Python面向对象编程么,请持续关注连载~


新福利:点击阅读原文了解618活动详细信息

关注公众号,“Python爱好者社区”,回复“爬虫”即可获取崔老师爬虫免费学习视频。


Python爱好者社区


为大家提供与Python相关的最新技术和资讯。


长按指纹 > 识别图中二维码 > 添加关注

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存