|  | 
 
30鱼币 
| 【测试题】4. 请指出以下代码的问题所在: class Counter:
 def __init__(self):
 self.counter = 0
 def __setattr__(self, name, value):
 self.counter += 1
 super().__setattr__(name, value)
 def __delattr__(self, name):
 self.counter -= 1
 super().__delattr__(name)
 
 动动手2. 修改上边【测试题】第 4 题,使之可以正常运行:编写一个 Counter 类,用于实时检测对象有多少个属性。
 >>> 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:
 def __init__(self):
 super().__setattr__('counter', 0)
 def __setattr__(self, name, value):
 super().__setattr__('counter', self.counter + 1)
 super().__setattr__(name, value)
 def __delattr__(self, name):
 super().__setattr__('counter', self.counter - 1)
 super().__delattr__(name)
 
 在类中定义属性(静态变量),也能达到预期的目的,不知道有什么问题,请各位大佬给我讲讲:
 class Counter:
 counter = 0
 def __setattr__(self, name, value):
 Counter.counter += 1
 super().__setattr__(name, value)
 def __delattr__(self, name):
 Counter.counter -= 1
 super().__delattr__(name)
 
 
 | 
 
最佳答案
查看完整内容 功能上是能实现的,要知道区别可以看一下类变量和实例变量的区别。
类名.类变量名,实例名.类变量名 访问的实际上是同一个命名空间的变量,所以类变量具有“一改全改”的特点
https://blog.csdn.net/chb4715/article/details/79104376 |