求助 super()应用
>>> 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)
super().__setattr__(name, value)
def __delattr__(self, name):
self.counter -= 1
self.k.remove(name)
super().__delattr__(name)
请问上述代码中的 super().__setattr__(name, value)和super().__delattr__(name)有什么作用?实在是看不懂! super(类名, self)就是调用父类的函数,下面就是调用了父类的__setattr__函数
def __setattr__(self, name, value):
if name != 'counter':
if name not in self.k:
self.counter += 1
self.k.append(name)
super().__setattr__(name, value)
因为你的__setattr__没有达到应该的效果,所以需要用父类的方法来达到效果。 super() 就是调用父类原有的方法嘛
因为你重写 __setattr__ 和 __delattr__ 会覆盖父类原有的这个方法的功能,而我们目的并不是全部重写,只是增加了一些功能,比如你这:def __setattr__(self, name, value):
if name != 'counter':
if name not in self.k:
self.counter += 1
self.k.append(name)
如果单纯这样写,不用super调用就会失去原有的功能,设置变量,而你重新调用了父类的方法,就等于你重写的这个方法不仅附带父类的功能还有自己新的功能
谢谢啦,还有点不明白的是:并不是所有的魔法方法被修改完都要使用super()调用父类,什么时候需要用super()调用呢?什么时候又不需要? 比如下面这个代码又不用在重写完__setattr__后使用supper(),但却可以实现目标效果。
def __setattr__(self, name, value):
self.__dict__ = value + 1
页:
[1]