| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
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) 
我亲测也没啥问题,也可以实现。所以有点不懂,为何要搞个列表出来,也没看出以后可以有什么方便操作的地方,本人新手,还请各位理解一下。能否指正一下我这里的代码是否有什么隐藏问题。谢谢
self.k是一个列表,他储存着实例对象的属性名,原代码中的第二个if语句就是判断有无重名 
而您的代码,没有判断重名 
意思就是,如果您重复设置: 
c.x=1 
c.x=2 
此时,counter应为1,但您的代码里,counter是2 
 
 
 |   
 
 
 
 |