|
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
|