题目:
a.定义一个Star类(明星类),包含初始化init方法:
成员属性:明星姓名
明星的电影
成员方法:playing()
打印:“xxx出演了yyy,非常好看”
打印对象时显示“xxx是我的偶像,我非常喜欢他的电影yyy”
删除对象提示“xxx我不再喜欢了”
xxx为明星姓名,yyy是电影的名字
b.键盘循环输入五个Star对象的姓名和电影名。
c.分别调用输入Star对象的playing方法和打印对象
class star(object):
def __init__(self,name,movie):
self.name = name
self.movie = movie
def playing(self):
print(f"{self.name}出演的{self.movie}非常好看")
def __str__(self):
return f"{self.name}是我的偶像,我非常喜欢他的电影{self.movie}"
def __del__(self):
print(f"我不喜欢{self.name}")
i =0
while i <5:
s = input("请输入你喜欢的明星:")
m = input("请输入你喜欢的电影名称:")
star1 = star(s,m)
star1.playing()
print(star1)
# star1.__del__()
i +=1
此我使用了while循环输出打印,但是最后发现一个问题,如下
会在第二次循环输入打印完之后,输出“上一次循环的“我不喜欢xxx”,思考之后发现,因为while循环中的star1会在下一次循环我输入完之后将上一次的star1的值替换掉,这个时候可以看出day1里面del魔法方法的自动调用的时机,会在引用计数为0的时候自动调用del这个魔法方法,即输出“我不喜欢xxx”
改法如下:
class Star(object):
def __init__(self,name,movie):
self.name = name
self.movie = movie
def playing(self):
print("%s出演了%s,非常好看"%(self.name,self.movie))
def __str__(self):
return "%s是我的偶像,我非常喜欢他的电影%s"%(self.name,self.movie)
def __del__(self):
print("我不喜欢%s了"%self.name)
mov_l = []
for i in range(3):
name = input("请输入你喜欢的明星:")
movie = input("请输入电影名")
s = Star(name,movie)
mov_l.append(s)
for i in mov_l:
i.playing()
print(i)