Python & 类 - 我可以在超类中使用将在子类中创建的方法吗?

Python & Classes - Can I use a method in a superclass that is going to be created in a subclass?

希望你一切都好。我需要做一些功课,我想出了一个疑问,我不知道是否可以通过这种方式解决。如果你能帮助我,你介意吗?还是谢谢了。

假设我们有这个:

class human:
    def dress(self, weather):
        return color(weather)

class girl(human):
    def color(self, weather):
        if weather == 'rainy':
            print('red')
        else:
            print('blue')

我可以这样做吗?因为乍一看我有一个问题,即人类的 color() 是未定义的(逻辑上)。你可能会问,你为什么会有这样的想法?因为是解决问题的说明。哪个最好解决呢?

再次感谢!

是的,你可以做到。 superclasses 中的方法留给 subclasses 定义的情况并不少见。通常 superclass 会有一个占位符实现,它会抛出一个异常,表明 subclass 需要定义它——然而这并不是工作所必需的。

class human:
    def dress(self, weather):
        return self.color(weather)

    def color(self, weather):
        raise NotImplementedError("Subclass needs to define this.")

class girl(human):
    def color(self, weather):
        if weather == 'rainy':
            c = 'red'
        else:
            c = 'blue'
        print(c)
        return c

某些基 class 不能直接使用,需要子class 来实现基 class 调用的方法。如果你 subclass 这样的 class 并填写所需方法的实现.. 基础 class 已经定义的方法调用它们将起作用。

例如,假设我们有一个女孩实例。我们希望它能适应天气。即使 subclass 没有定义 dress() 它仍然有那个方法,因为它继承了它。

>>> mary = girl()
>>>
>>> mary.dress("rainy")
red

在运行时,解释器运行 dress() 的代码并在其中看到 color()。然后它在 girl 上查找该函数并找到它。基 class 是否定义它并不重要。

不,您不能从父 class 调用子 class 方法,除非方法具有相同的名称。 如果您在父 class 中创建相同的方法 "color" 也可以做到这一点。