鱼C论坛

 找回密码
 立即注册
查看: 1408|回复: 1

[已解决]python 45课后最后一题

[复制链接]
发表于 2020-10-17 13:08:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
该题的需要实现的目的是:
>>> c = Counter()
>>> c.x = 1
>>> c.counter
1
>>> c.y = 1
>>> c.z = 1
>>> c.counter
3
>>> del c.x
>>> c.counter
2
该题的答案为:
>>> class Counter:
        k = []
        def __init__(self):
                self.counter = 0
        def __setattr__(self, name, value):
                if name != 'counter':
                        if name not in self.k:
                                self.counter += 1
                                self.k.append(name)
                super().__setattr__(name, value)
        def __delattr__(self, name):
                self.counter -= 1
                self.k.remove(name)
                super().__delattr__(name)
我写的是:
class Counter:
    def __init__(self):
        self.counter = 0
    def __setattr__(self, name , value):
        if name != 'counter':
            self. counter +=1
        super().__setattr__(name,value)
    def __delattr__(self,name):
        self.counter -= 1
        super().__delattr__(name)
我亲测也没啥问题,也可以实现。所以有点不懂,为何要搞个列表出来,也没看出以后可以有什么方便操作的地方,本人新手,还请各位理解一下。能否指正一下我这里的代码是否有什么隐藏问题。谢谢
最佳答案
2020-10-17 14:13:07
self.k是一个列表,他储存着实例对象的属性名,原代码中的第二个if语句就是判断有无重名
而您的代码,没有判断重名
意思就是,如果您重复设置:
c.x=1
c.x=2
此时,counter应为1,但您的代码里,counter是2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-17 14:13:07 | 显示全部楼层    本楼为最佳答案   
self.k是一个列表,他储存着实例对象的属性名,原代码中的第二个if语句就是判断有无重名
而您的代码,没有判断重名
意思就是,如果您重复设置:
c.x=1
c.x=2
此时,counter应为1,但您的代码里,counter是2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 07:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表