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)
posted @ 2020-04-09 12:02  秋弦  阅读(93)  评论(0编辑  收藏  举报