这是一个“怎么做”的问题,而不是“我应该吗?”在合理的程度上,我确实理解这种替代的局限性。你知道吗
在他关于Super considered super!的精彩演讲中,雷蒙德·赫廷格提到,他认为“超级”是“超级”的一个坏名字,我们应该更多地把它看作“下一个”。 和其他许多人一样,我也觉得这是有道理的。你知道吗
因此,在我自己的代码中,我在想,如果我想在任何时候调用“下一行”,而不是使用super
,是否可以使用不同的名称/句柄。
我正在考虑使用句柄:“下一行中的下一个\u”,因为它是替换的直观名称!你知道吗
我理解在任何其他导入的包中使用此名称时可能发生的潜在冲突。但我在Python的探索/学习期间并不关心这一点。你知道吗
所以,我的问题是:我应该如何在一个中心位置实现这一目标?你知道吗
以雷蒙德的相关blog post为例
class LoggingDict(dict):
def __setitem__(self, key, value):
print(f'Setting key {key} to {value}')
super().__setitem__(key, value)
我希望能够做到这一点:
class LoggingDict(dict):
def __setitem__(self, key, value):
print(f'Setting key {key} to {value}')
next_in_line().__setitem__(key, value)
编辑1:
虽然我希望在一个地方而不是在每个模块中执行此操作,但即使以下操作也会导致错误:
next_in_line = super
class LoggingDict(dict):
def __setitem__(self, key, value):
print(f'Setting key {key} to {value}')
next_in_line().__setitem__(key, value)
ld = LoggingDict()
ld[1] = 'a'
输出:
Setting key 1 to a
Traceback (most recent call last):
File "D:/pyth/logging_dict.py", line 9, in <module>
ld[1] = 'a'
File "D:/pyth/logging_dict.py", line 6, in __setitem__
next_in_line().__setitem__(key, value)
RuntimeError: super(): __class__ cell not found
警告:不要这样做!关键字
super
是Python语言的一部分。如果你不喜欢,那就改用这种语言,试着说服其他程序员也跟着你。否则,除了您之外的所有人(甚至您自己)都无法理解您的代码。你知道吗现在你被警告了。。。您可以使用
super
的显式形式:或者可以在装饰器中破解函数的
__globals__
属性:不过,别那么做。你知道吗
相关问题 更多 >
编程相关推荐