案例1:
题目:
a.定义一个Star类(明星类),包含初始化init方法:
成员属性:
明星姓名
明星的电影
成员方法:playing()
打印:“xxx出演了yyy,非常好看”
打印对象时显示“xxx是我的偶像,我非常喜欢他的电影yyy”
删除对象提示“xxx我不再喜欢了”
xxx为明星姓名,yyy是电影的名字
b.键盘循环输入五个Star对象的姓名和电影名。
c.分别调用输入Star对象的playing方法和打印对象
请输入你喜欢的明星:周星驰
请输入电影名功夫
请输入你喜欢的明星:刘德华
请输入电影名狄仁杰
请输入你喜欢的明星:周润发
请输入电影名赌神
周星驰出演了功夫,非常好看
周星驰是我的偶像,我非常喜欢他的电影功夫
刘德华出演了狄仁杰,非常好看
刘德华是我的偶像,我非常喜欢他的电影狄仁杰
周润发出演了赌神,非常好看
周润发是我的偶像,我非常喜欢他的电影赌神
我不喜欢周星驰了
我不喜欢刘德华了
我不喜欢周润发了
class Star(object):
# 定义一个__init__()初始化方法
def __init__(self, name, movie):
self.name = name
self.movie = movie
# 定义一个对象方法 => def 方法(self):
def playing(self):
print(f'{self.name}出演了{self.movie},非常好看')
# 定义一个__str__()魔术方法
def __str__(self):
return f'{self.name}是我的偶像,我非常喜欢他的电影{self.movie}'
# 定义一个__del__()魔术方法
def __del__(self):
print(f'{self.name}我不再喜欢了')
list1 = []
for i in range(5):
name = input('请输入您喜欢明星的姓名:')
movie = input('请输入您喜欢明星的电影:')
s = Star(name, movie)
list1.append(s)
for i in list1:
i.playing()
print(i)
案例2:
题目:
搬家具规则:
- 家具分不同的类型,并占用不同的面积
- 输出家具信息时,显示家具的类型和家具占用的面积
- 房子有自己的地址和占用的面积
- 房子可以添加家具,如果房子剩余面积可以容纳家具,则提示家具添加成功;否则提示添加失败
- 输出房子信息时,可以显示房子的地址、占地面积、剩余面积
简单一些的写法:
class furniture():
# 未来对象的属性
def __init__(self, genre, acreage):
self.genre = genre
self.acreage = acreage
# 未来对象的方法
def __str__(self):
return f'家具的类型为{self.genre},此家具占用的面积为{self.acreage}m^2。'
class house():
# 未来对象的属性
def __init__(self, address, acreage):
self.address = address
self.acreage = acreage
# 未来对象的方法
def __str__(self):
return f'房子的地址为{self.address},占地面积为{self.acreage}m^2,剩余面积为:{h1.acreage-fur1.acreage}m^2'
fur1 = furniture('sofa', 30)
h1 = house('山东省聊城市茌平区', 120)
print(fur1)
print(h1)
if fur1.acreage < h1.acreage:
print('家具添加成功!')
else:
print('家具添加失败!')
更加标准的写法:
#5,#6 比较难理解
注意:
①两个类交互,将一个类产生的对象作为参数传入另一个类中
②此处用到面向对象中封装的特性,对象的属性是要封装起来的,而接口就是用来访问它的
③strip(‘,’),默认去除两边的空格,如果指定了符号,代表删除两边指定的符号信息
(Python strip() 方法用于去除字符串开头和结尾处指定的字符(默认为空格或换行符)或字符序列,不会去除字符串中间对应的字符。)
class House(object):
# 4、为房子对象定义属性
def __init__(self, address, area):
self.address = address
self.area = area
# 由于要摆放家具,所以需要定义一个专门属性,用于存放家具信息
self.items = [] # 其中存放类似[家具对象1,家具对象2,家具对象3....]
# 5、为房子类对象添加一个addItem方法,用于向房子中添加家具对象
def addItem(self, item): # item代表用于接受家具对象,比如item = bed对象
# 判断家具对象所需要占据的空间
needarea = bed.getArea()
if self.area >= needarea:
# 可以摆放,追加到列表中,房子面积 - 家具占用面积
self.items.append(item)
# 房子自身剩余面积 - 家具面积
self.area -= needarea
print('恭喜您家具已经成功摆放!')
else:
# 家具占用面积 > 房子剩余面积,所以无法摆放
print('很抱歉,由于此家具占用面积大于房子剩余面积,此家具无法摆放!')
def __str__(self):
mfz = f'我的房子位于在{self.address},房子剩余面积为{self.area}'
# 由于self.items是一个列表,其里面的内容是对象,要想打印里面的所有内容,必须把里面的数据一个一个取出来
if len(self.items) > 0:
mfz += ',目前摆放的家具主要有:'
# 如果列表长度大于0,代表家里面有家具,列出来 => [对象1, 对象2]
for i in self.items:
mfz = mfz + i.getName() + ',' # 我的房子位于在山东省聊城市,房子剩余面积为106。,目前摆放的家具主要有:席梦思,硬板床,
# 当所有家具拼接完成后,去掉最后一个逗号 => strip(','),默认去除两边的空格,如果指定了符号,代表删除两边指定的符号信息
mfz = mfz.rstrip(',') # 我的房子位于在山东省聊城市,房子剩余面积为106,目前摆放的家具主要有:席梦思,硬板床
return mfz # mfz变量,里面必须是一个字符串类型的数据
class furniture(object):
# 1、为家具对象定义属性
def __init__(self, name, area):
self.__name = name
self.__area = area
# 2、专门定义两个公共方法(接口),专门实现对属性的访问
def getName(self):
return self.__name
def getArea(self):
return self.__area
# 3、定义一个__str__()魔术方法,用于打印家具对象信息
def __str__(self):
return f'家具名称:{self.__name},家具的占用面积:{self.__area}m^2'
bed = furniture('席梦思', 8)
print(bed)
my_house1 = House('山东省聊城市', 120)
my_house1.addItem(bed)
print(my_house1)
bed = furniture('硬板床', 6)
my_house1.addItem(bed)
print(my_house1)