|  | 
 
 发表于 2020-4-29 19:36:28
|
显示全部楼层 
| 还是发现一个bug,如果初始化一个c=Counter,一个d=Counter, 然后c.x=1,这时候c.counter是1,再给d.x=1,这时候属性名已经在字典里了,所以d.counter还是0 
 复制代码>>> c=Counter()
>>> c.x=1
>>> c.y=1
>>> c.counter
2
>>> d=Counter()
>>> d.x=4
>>> d.y=5
>>> d.counter
0
 试了下如果添加字典时把值也写进去就没问题了
 
 复制代码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+str(value))
            super().__setattr__(name, value)
    def __delattr__(self, name):
            self.counter -= 1
            self.k.remove(name)
            super().__delattr__(name)
 运行结果
 
 复制代码>>> c=Counter()
>>> c.x=1
>>> c.y=1
>>> c.counter
2
>>> d=Counter()
>>> d.x=4
>>> d.y=5
>>> d.counter
2
>>> c.z=7
>>> c.counter
3
>>> d.z=7
>>> d.counter
3
>>> c.i=5
>>> c.counter
4
>>> d.counter
3
>>> d.i=5
>>> d.counter
4
>>> 
 | 
 |