Python魔法方法
魔法方法
在python中,_ xx _()的函数叫做魔法方法,指的是具有特殊功能的函数。
1. _ init _()
_ init _()方法的作用:初始化对象
# 定义init魔法方法设置初始化属性,并访问调用
class Washer():
def __init__(self):
# 添加实例属性
self.width=500
self.height=800
def print_info(self):
print(f'洗衣机的宽度是{self.width}')
print(f'洗衣机的高度是{self.height}')
# 实例化对象
haier=Washer()
# 调用方法
haier.print_info()
注意:
1._ init ()方法,在创建一个对象时默认被调用,不需要手动调用
2. init _(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递过去
2.带参数的 _ init _()
class Washer():
def __init__(self,width,height):
self.width=width
self.height=height
def print_info(self):
print(f'洗衣机的宽度是{self.width}')
print(f'洗衣机的高度是{self.height}')
# 创建对象,创建多个对象让其属性值不同,调用实例方法
haier1=Washer(400,500)
haier1.print_info()
haier2=Washer(100,200)
haier2.print_info()
3 _ str _()方法
当使用print输出对象的时候,默认打印对象的内存地址。如果类定义了_ str _()方法,那么就会打印从在这个方法中return的数据.
class Washer():
def __init__(self):
self.width=300
def __str__(self):
return '解释说明:这是洗衣机说明'
haier=Washer()
print(haier)
4._ del _()方法
当删除对象时,python解释器也会默认调用_ del _()方法。
class Washer():
def __init__(self):
self.width=300
def __del__(self):
print('对象已删除')
haier=Washer()
del haier
案例01-烤地瓜
需求:
1.被烤的时间和对应的地瓜状态:
0-3分钟:生的
3-5分钟.半生不熟
5-8分钟:熟的
超过8分钟:烤糊了
2.添加的调料
用户可以按自己的意愿添加调料
分析:
1.地瓜的属性
被烤的时间
地瓜的状态
添加的调料
2.地瓜的方法
1.被烤
用户根据意愿设定每次烤地瓜的时间
判断地瓜被烤的总时间是在哪个区间,修改地瓜状态
2.添加调料
用户根据意愿设定添加的调料
将用户添加的调料存储
3.显示对象信息
# 1.定义类:初始化属性,焙烤和添加调料的方法,显示对象信息的str
class SweetPotato():
def __init__(self):
#焙烤的时间
self.cook_time=0
#地瓜的状态
self.cook_static='生的'
#调料列表
self.condiments=[]
def cook(self,time):
'''烤地瓜的方法'''
# 1.先计算地瓜整体考过的时间
self.cook_time +=time
# 2.用整体烤过的时间再判断地瓜的状态
if 0<=self.cook_time<3:
self.cook_static="生的"
elif 3<=self.cook_time<5:
self.cook_static="半生不熟"
elif 5<=self.cook_time<8:
self.cook_static="熟了"
elif self.cook_time>=8:
self.cook_static="烤糊了"
def add_condiments(self,condiment):
#用户意愿的调料追加到调料列表
self.condiments.append(condiment)
def __str__(self):
return f'这个地瓜的被考过的时间是{self.cook_time},状态是{self.cook_static},调料有{self.condiments}'
# 2.创建对象并调用对应的实例方法
digua1=SweetPotato()
print(digua1)
digua1.cook(2)
digua1.add_condiments('辣椒面')
print(digua1)
digua1.cook(2)
digua1.add_condiments('酱油')
print(digua1)
2.案例02-搬家具
需求:将小于房子剩余面积的家具摆放到房子中
分析:需求涉及两个事务:房子类和家具类
定义类:
1.房子类
01.实例属性
房子地理位置
房子占地面积
房子剩余面积
房子内家具列表
02.实例方法
容纳家具
03.显示房屋信息
2.家具类
家具名称
家具占地面积
class Furniture():
def __init__(self,name,area):
# 家具名字
self.name=name
# 家具占地面积
self.area=area
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},' \
f'剩余面积{self.free_area},家具有{self.furniture}'
def add_furniture(self,item):
'''容纳家具'''
# 如果家具占地面积<=房子剩余面积:可以搬入(家具列表添加家具名字数据并房子剩余面积更新:)
# 房屋剩余面积-该家具的占地面积
# 否则:提示用户家具太大,剩余面积不足,无法容纳
if self.free_area>=item.area:
self.furniture.append(item.name)
#家具搬入后,房屋剩余面积=之前剩余面积-该家具面积
self.free_area-=item.area
else:
print("家具太大,剩余面积不足,无法容纳")
# 双人床:6
bed=Furniture('双人床',6)
# 房子1:北京,1000
jia1=home('北京',1000)
print(jia1)
# 添加家具
jia1.add_furniture(bed)
print(jia1)
ball=Furniture('篮球场',2000)
jia1.add_furniture(ball)
print(jia1)