3

这显然是有原因的,但我没有足够的经验来识别它。

这是 Python文档中给出的示例:

class C(B):
    def method(self, arg):
        super(C, self).method(arg) # Why do we have to mention 'C' again?

是否没有一种方法可以从不依赖于复制类“C”的名称的实例方法中“了解”类型?似乎该示例可能导致类名已更新但超级函数调用中的类型参数变得陈旧的情况?

4

2 回答 2

2

一方面,DRY 更多的是大段代码被复制;另一方面,是的,super()调用中的类名可能会过时(这发生在我身上)。

在 Python 3 中,super()已经修改为不需要类名,只要在类中定义函数即可——所以除非你是猴子补丁,否则这不是问题。

于 2015-03-12T17:18:52.633 回答
1

在 python 中手动调用 self 的方式相同 super 是一个简单的函数,我的意思是,python 函数不知道执行上下文。例如,这种行为对于猴子修补是实用的。

例如,我从 pypi 获取了你的 C 类,你每个月都会更新它,因为它是一个有用的类。我想修改它的方法行为,以便它使用您的 C 类更新我的其他要求:

from utils import do_magic
from a import C

def method(self, arg):
    super(C, self).method(arg)
    do_magic(self)

C.method = method
于 2015-03-12T16:59:30.567 回答