python面向对象2--综合案例:烤地瓜、搬家具、单继承、多继承

python面向对象1–类、对象、属性、魔法方法
python面向对象2–综合案例:烤地瓜、搬家具、单继承、多继承
python面向对象3-多层继承、super()、私有权限、多态、类属性实例属性、类方法和静态方法

五、综合应用

5.1 烤地瓜

需求:
1.被烤的时间和对应的地瓜状态:
2,添加调理,用户可以根据自己的意愿添加调料

需求1:被烤的时间和对应的地瓜状态

步骤:
事物分类—地瓜类

定义类
地瓜的属性:被烤的时间、状态、调料
地瓜的方法:被烤 添加调料
显示对象信息

#1,定义类:初始化属性、方法、显示信息的str
class SweetPotato():
	def __init__(self):
		#被烤时间
		self.cook_time = 0
		#烤的状态
		self.cook_state = '生的'
		#调料列表
		self.condiments = []
	
	#2,创建对象并调用对应的实例方法
	def cook(self,time):
		"""烤地瓜方法"""
		#1,计算整体考过的时间
		self.cook_time += time
		#2,用整体时间进行判断状态
		if 0 <= self.cook_time <3:
			self.cook_state = '生的'
		elif 3 <= self.cook_time <5:
			self.cook_state = '半生不熟'
		elif 5 <= self.cook_time <8:
			self.cook_state = '熟了'
		elif self.cook_time >=8:
			self.cook_state = '烤糊了'
	
	#str魔法方法,用于输出对象状态
	def __str__(self):
		return f'这个地瓜的被烤过的时间是{self.cook_time},状态是{self.cook_state}'
			

digua1 = SweetPotato()
print(digua1)  #这个地瓜的被烤过的时间是0,状态是生的
digua1.cook(2)
print(digua1) #这个地瓜的被烤过的时间是0,状态是生的

digua1.cook(3)
print(digua1) #这个地瓜的被烤过的时间是5,状态是熟了

太强了,这个讲的清晰又简洁

需求2: 添加调料
class SweetPotato():
	def __init__(self):
		#被烤时间
		self.cook_time = 0
		#烤的状态
		self.cook_state = '生的'
		#调料列表
		self.condiments = []
	
	#2,创建对象并调用对应的实例方法
	def cook(self,time):
		"""烤地瓜方法"""
		#1,计算整体考过的时间
		self.cook_time += time
		#2,用整体时间进行判断状态
		if 0 <= self.cook_time <3:
			self.cook_state = '生的'
		elif 3 <= self.cook_time <5:
			self.cook_state = '半生不熟'
		elif 5 <= self.cook_time <8:
			self.cook_state = '熟了'
		elif self.cook_time >=8:
			self.cook_state = '烤糊了'
	
	#
	def add_condiments(self,condiment):
		self.condiments.append(condiment)

	#str魔法方法,用于输出对象状态
	def __str__(self):
		return f'这个地瓜的被烤过的时间是{self.cook_time},状态是{self.cook_state},调料是{self.condiments}'

digua1 = SweetPotato()
print(digua1)  #这个地瓜的被烤过的时间是0,状态是生的,调料是[]
digua1.add_condiments('辣椒面')
digua1.cook(2)
print(digua1) #这个地瓜的被烤过的时间是2,状态是生的,调料是['辣椒面']
digua1.add_condiments('酱油')
digua1.cook(3)
print(digua1) #这个地瓜的被烤过的时间是5,状态是熟了,调料是['辣椒面', '酱油']
5.2 搬家具

需求:将小于房子剩余面积的家具搬到房子中
步骤:两个事物:房子类,家具类

房子类:

  • 实例属性:房子位置、房子占地面积、房子剩余面积、房子内家具列表
  • 实例方法:容纳家具
  • 显示房屋信息str

家具类:

  • 属性:家具名称、家具占地面积
#家具类
class Furniture():
	def __init__(self,name,area):
		#家具名称
		self.name = name
		#家具占地面积
		self.area = area
		
#双人床
bed = Furniture('双人床',6)
sofa = Furniture('沙发',10)
ball = Furniture('篮球场', 2000)

#房屋类
class Home():
	def __init__(self,address,area):
		self.address = address  #房子位置
		self.area = area #房屋面积
		self.free_area = area #剩余面积
		self.furniture = []
	
	def __str__(self):
		return f'房子地理位置在{self.address},房屋面积{self.area},剩余面积{self.free_area},家具有{self.furniture}'
		
	#家具的容纳
	def add_furniture(self,item):  #item是传入的家具对象
		if self.free_area >= item.area:
			self.furniture.append(item.name)
			self.free_area -=item.area  #剩余面积更新
		else:
			print('家具太大,剩余面积不足,无法容纳')

# 房子1:北京,1000
jia1 = Home('北京', 1000)
print(jia1) #房子地理位置在北京,房屋面积1000,剩余面积1000,家具有[]

jia1.add_furniture(sofa)
print(jia1) #房子地理位置在北京,房屋面积1000,剩余面积990,家具有['沙发']

jia1.add_furniture(ball)
print(jia1)
#家具太大,剩余面积不足,无法容纳
#房子地理位置在北京,房屋面积1000,剩余面积990,家具有['沙发']
经典类或旧是类
#新式类
class 类名(object:
	代码

二、单继承

故事:师傅有一套煎饼果子技术,打算传给最得意的弟子daqiu

一个父类继承给唯一的子类
要定义师傅类和徒弟类,徒弟继承师傅
class 子类名(父类名):

#1,师傅类。属性和方法
class Master(object):
	def __info__(self):
		self.kongfu = '[古法煎饼果子配方]'
	def make_cake(self):
		print(f'运用{self.kongfu}制作煎饼果子')
#2,定义徒弟类,继承师傅类
class Prentice(Master):   
	pass
#3,用徒弟类创建对象,调用实例属性和方法
daqiu = Prentice()
print(daqiu.kongfu)  #[古法煎饼果子配方]
daqiu.make_cake()  #运用[古法煎饼果子配方]制作煎饼果子

简化单继承代码

#子类继承父类,指子类默认继承父类的所有属性和方法
#父类A
class A(object):
	def __init__(self):
		self.num = 1
	def info_print(self):   #定义一个方法,后面调用
		print(self.num)

#子类B
class B(A):
	pass

#创建对象
result = B()
result.info_print() #输出:1
#子类的对象也能使用父类的方法

所有类默认继承object类,object类是顶级类或者基类,其他子类叫做派生类

三、多继承

故事:daqiu除了学习师傅的技术,还想学习学校的煎饼果子技术

多继承:一个类同时继承多个父类

#1,师傅类。属性和方法
class Master(object):
	def __info__(self):
		self.kongfu = '[古法煎饼果子配方]'
	def make_cake(self):
		print(f'运用{self.kongfu}制作煎饼果子')

#学校类
class School(object):
	def __info__(self):
		self.kongfu = '[学校煎饼果子配方]'
	def make_cake(self):       #两个父类的属性和方法一样
		print(f'运用{self.kongfu}制作煎饼果子')

#2,定义徒弟类,继承师傅类
class Prentice(Master,School):    
	pass

#3,用徒弟类创建对象,调用实例属性和方法
daqiu = Prentice()
print(daqiu.kongfu)  #[古法煎饼果子配方]
daqiu.make_cake()  #运用[古法煎饼果子配方]制作煎饼果子
#第一个父类是Master,优先继承它

结论:一个类有多个父类时,默认使用第一个父类的同名属性和方法

四、子类重写父类同名方法和属性

子类中存在和父类同门的属性和特征,此时,创建子类的对象,调用它的属性和特征,是优先子类

故事:daqiu在掌握师傅的技术后,又自己研发出一套独创新技术,此时使用daqiu的技术应该是daqiu自己的计算

class Master(object):
    def __init__(self):
        self.kongfu = '[古法煎饼果子配方]'
    def make_cake(self):
        print(f'运用{self.kongfu}制作煎饼果子')

class Prentice(Master):
    def __init__(self):
        self.kongfu = '[独制煎饼果子配方]'

    def make_cake(self):
        print(f'运用{self.kongfu}制作煎饼果子')

daqiu = Prentice()
print(daqiu.kongfu)  #[独制煎饼果子配方]
daqiu.make_cake()  #运用[独制煎饼果子配方]制作煎饼果子

结论:子类有,则优先子类

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值