o1_面向对象的封装.py

 1 #  Learner BM
 2 """
 3 面向对象的封装
 4     意思就是将对象的属性和方法全部封装在类的内部,
 5     外界使用类创建对象,然后通过对象的
 6 本次根据课程实现一个案例 小明哎跑步
 7 需求: 1小米体重75kg
 8      2每次跑步减少0.5kg
 9      3每次吃东西体重增加1公斤
10 
11 分析:
12     定义一个人类,包含属性 姓名
13                        体重
14                   方法  吃东西,每次调用修改体重属性 +1 公斤
15                   方法  跑步,每次调用修改体重属性 -0.5kg
16 """
17 
18 # 定义一个人类
19 class Human():
20     #  定义实例属性,参数记录姓名及体重
21     def __init__(self,name,weight):
22         # 等号左侧是属性,等号右侧是形参
23         self.name = name
24         self.weight = weight
25         print('我叫%s,我的初始体重是%s公斤'%(self.name,self.weight))
26     #  定义实例方法吃东西,修改体重属性
27     def eat(self):
28         #   修改体重属性
29         self.weight +=1
30         print('%s又吃了东西,体重又增加了,现在是%s公斤' %(self.name,self.weight))
31     #  定义跑步方法,修改体重属性
32     def run(self):
33         self.weight-=0.5
34         print('%s坚持锻炼,再跑1公里,努力减肥,现在是%s公斤' %(self.name,self.weight))
35 
36 #  创建对象小明
37 xiaoming = Human('小明',75)
38 xiaoming.eat()
39 xiaoming.run()
40 
41 # 同样可以创建第二个对象,小美,对象之间的属性相互独立.不受影响
42 xiaomei = Human('小明',45)
43 xiaoming.eat()
44 xiaoming.run()
View Code

o2_摆放家具的封装.py(一个对象的方法参数,可以是另外一个对象)

同理一个对象的属性,可以也可以是另外一个对象,(士兵突击案例)
******
此案例主要演练的是对象的跨类调用函数方法,当一个实例A调用自身方法时候,参数为另外一个类的实例B的时候,
此时,A可以实现夸类访问B的属性和方法

"""
具体流程

 

 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)
View Code

 

posted on 2020-03-08 16:02  RRRRRRR1  阅读(49)  评论(0)    收藏  举报