Doesn't Python's super() built-in violate DRY?
这显然是有原因的,但我没有足够的经验去认识它。
这是python文档中给出的示例:
1 2 3 | class C(B): def method(self, arg): super(C, self).method(arg) # Why do we have to mention 'C' again? |
是否没有一种方法可以从实例方法中"知道"类型,而不依赖于复制类"c"的名称?似乎示例可能导致类名更新,但超级函数调用中的类型参数变为过时的情况?
一方面,dry更多的是关于大量代码被复制的部分;另一方面,是的,
在python 3中,只要函数在类中定义,
在python super中,手工调用self的方法也是一个简单的函数,我的意思是,python函数不知道执行上下文。例如,这种行为适用于猴子修补。
例如,我从Pypi中获取了您的C类,您每个月都会更新它,因为它是一个有用的类。我想修改它的方法行为,这样它将使用您的C类更新我的其他需求的行为:
1 2 3 4 5 6 7 8 | from utils import do_magic from a import C def method(self, arg): super(C, self).method(arg) do_magic(self) C.method = method |