|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
关于课后作业第三题,编写一个counter类 用于检测实时对象有多少个属性,我写了下面这个代码,感觉怪怪的,也确实没运行出来,问题出在哪里啊?
class C:
def __init__(self):
self.counter=0
def __setattr__(self,name,value):
super().__setattr__(name,value)
self.counter+=1
super().__setattr__(name,value)
def __delattr__(self,name):
super().__delattr__(name)
self.counter-=1
super().__delattr__(name)
还有就是,
def __setattr__(self,name,value):
super().__setattr__(name,value)
self.counter+=1
super().__setattr__(name,value)
这种在__setattr__里面遇到赋值的时候 是继续运行完后面的super().__setattr__还是会立即跳出来重新运行 def __setattr__(self,name,value)
这个不一样,这个 value 是属于外部传入的数,而不属于这个类的,只有这个类里面的才会调用自己类的方法
举个例子:c = C()
c.test = 10 # 这里的值是外部传入的 也就是 name = test 而 value = 10
print(c.test)
>>> 11
在 c.test = 10 赋值过程实际上是这样的:def __setattr__(c,name=test,value=10):
value+=1 # 10+1 = 11
super().__setattr__(name,value) # 然后调用父类方法赋值 则 test属性的值为 11
|
|