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

浏览: 4265

前言

前文传送门:

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

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

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

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

Clipboard Image.png


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

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


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

既然要买房,那就买吧

  Clipboard Image.png

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)

看一下运行结果:

Clipboard Image.png

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

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

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

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

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

Clipboard Image.png

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

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

例如:

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

Clipboard Image.png

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

Clipboard Image.png


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

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

所以定义一个类

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)

运行得到结果:

Clipboard Image.png

意思是这个床占用面积是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)

Clipboard Image.png


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









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


合理显示剩余空间

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

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

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

Clipboard Image.png

那怎么实现这个功能呢?

首先,我们对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)

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

结果显示

Clipboard Image.png

Clipboard Image.pngClipboard Image.png

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

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






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

Clipboard Image.png

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

推荐 8
本文由 ID王大伟 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

2 个评论

我想知道面向对象剩余的教程咋不更新了,是对象没了嘛
哈哈啊哈哈
同问

要回复文章请先登录注册