day1练习出现的错误

题目:

 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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值