从C ++的角度来看,这里可能存在两个误解。
首先,具有相同名称和不同签名的方法不会像C ++中那样重载它。如果您的Background对象之一试图不带任何参数调用buildField,则不会调用Field的原始版本-它已被完全隐藏。
第二个问题是,如果超类中定义的方法调用buildField,则将调用子类版本。在python中, 所有 方法都是动态绑定的,就像C ++virtual
方法一样。
__init__
预期Field将处理具有不带参数的buildField方法的对象。您将该方法与具有带有一个参数的buildField方法的对象一起使用。