python 45课后最后一题
该题的需要实现的目的是:>>> 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
页:
[1]