1 # Learner BM
2 """
3 需求
4 1,房子(house),有户型,面积,家具名称列表
5 新房子没有任何家具
6 2,家具(houseitem)有名字和占地面积其中
7 席梦思(bed)占地4平米
8 衣柜(chest)占地2平米
9 餐桌(tablei)占地1.5平米
10 3,将以上三件家具,添加到房子中
11 4,打印房子时候,要求输出户型,总面积,剩余面积,家具名称列表
12 ******
13 1,此案例主要演练的是对象的跨类调用函数方法,当一个实例A调用自身方法时候,参数为另外一个类的实例B的时候,
14 此时,A可以实现夸类访问B的属性和方法
15 2,注意两个类定义的时候,被使用的类需要先定义
16 比如A类使用B类的属性和方法,先定义B类
17
18 """
19 # 定义房子类
20 class House():
21 # 房子的属性
22 def __init__(self,house_type,area):
23 self.house_type =house_type
24 self.area = area
25 self.free_area =area
26 # 家具列表是通过外界方法修改的,所以不需要添加形参
27 self.item = [ ]
28 def __str__(self):
29 # __str必须拥有返回值
30 return ('户型是%s,房子面积是%s平米,剩余面积是%s平米,房子里面有家具%s' %
31 (self.house_type,self.area,self.free_area,self.item))
32 # additem(self,item): 关键方法,此方法item接收的是class HouseItem(): 创建的bed对象,而此对象具有name属性和area方法,
33 # 通过item接收后,可以实现在房子类中调用到家具类中的部分属性和方法,实现方法和属性的夸类交互
34 #******一句话就是对象可以当做参数进行传递,当传入其他对象的方法内部后,可以通过参数.属性,使用其他对象的属性和方法
35 # 修改家具列表的方法
36 def additem(self,item):
37 # 判断面积,应该判断剩余面积的
38 if item.area > self.free_area:
39 print('%s家具太大了,面积是%s平米,房子只有%s平米放不下'% (item.name,item.area,self.area))
40 return
41 else:
42 # self.item是实例家具列表的属性,是一个列表,直接使用append
43 self.item.append(item.name)
44 # 剩余面积=剩余面积-家具面积
45 self.free_area = self.free_area-item.area
46 # 错误算法,剩余面积=总面积-家具面积
47 #self.free_area = self.area-item.area
48 print('添加家具%s,房子里面有家具%s,剩余面积%s' % (item,self.item,self.free_area))
49 # 定义家具类
50 class HouseItem():
51 # 家具类的属性
52 def __init__(self,name,area):
53 self.name= name
54 self.area = area
55 def __str__(self):
56 # 重写str方法,返回值
57 return '家具的名称%s,家具的占地面积%s平米' %(self.name,self.area)
58
59 # 创建实家具实例
60 bed = HouseItem('席梦思',4)
61 chest = HouseItem('衣柜',2)
62 table = HouseItem('餐桌',150)
63
64 # 创建房子的实例
65 XM_house= House('小户型',40)
66 # 实例的方法接收另一个实例,使本实例能获取到另一个实例的属性和方法
67 # bed,chest,tale对象传入additem()方法
68 XM_house.additem(bed)
69 XM_house.additem(chest)
70 XM_house.additem(table)
71 # 输出房子信息
72 print(XM_house)