|
发表于 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
- >>>
复制代码 |
|