前提:面向对象基础和java思想类似
一、魔法方法
在python中,xx()的函数叫做魔法方法,指的是具有特殊功能的函数。
1、init()
作用:初始化对象
例:
class Washer():
def _init_(self):
#添加实例属性
self.width = 500
self.height = 800
def print_info(self):
print(f'洗衣机的宽度是{self.width},高度是{self.height}')
haier = Washer()
haier.print_info()
注意:在创建一个对象时默认被调用,不需要手动。
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},高度是{self.height}')
haier = Washer(10,20)
haier.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 _str_(self):
print('对象已经删除')
haier = Washer()
二、综合应用
1、烤地瓜
#定义类:初始化属性、被烤和添加调料的方法、显示对象信息的str
class SweetPotato():
def _init_(self):
#被烤的时间
self.cook_time = 0
#烤的状态
self.cook_state = '生的'
#调料列表
self.condiments = []
def cook(self,time):
#计算地瓜整体烤过的时间
self.cook_time += time
#判断地瓜状态
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)
def _str_(self):
return f'这个地瓜被烤过时间是{self.cook_time},状态是{self.cook_state}'
#创建对象并调用对应实例方法
digua1 = SweetPotato()
print(digua1)
digua1.cook(2)
digua.add_condiments('辣椒面')
print(digua1)
digua1.cook(2)
digua.add_condiments('辣椒油')
print(digua1)
2、搬家具
class Funiture():
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.funiture = []
def _str_(self):
return f'房子地理位置在{self.address},房屋面积是{self.area},剩余面积{self.free_area},家具有{self.funiture}'
def add_funiture(self,item):
if item.area <= self.free_area:
self.funiture.append(item.name)
self.free_area -= item.area
else:
print('家具太大,剩余面积不足,无法容纳')
bed = Funiture('双人床',6)
sofa = Funiture('沙发',10)
jia1 = Home('北京',1000)
print(jia1)
jia1.add_funiture(bed)
print(jia1)
ball = Funiture('篮球场',2000)
jia1.add_funiture(ball)
print(jia1)