首页 > 解决方案 > Python:递归调用的抽象方法

问题描述

我有一个名为 Message 的主类和一个名为 DDMessage 的子类。当我创建一个对象 DDMessage 时:

m = DDMessages(row["language"])

我有这个错误:

在此处输入图像描述

每个类的代码是...

信息

import abc


class Message(metaclass=abc.ABCMeta):

def __init__(self, language):
    self.set_message(language)

@abc.abstractmethod
def set_message(self, language):
    raise NotImplementedError("Message", "set_message", None,
                      "El usuario no ha implementado este método")

def get_message(self):
    return self.message

@abc.abstractmethod
def prepare_message(self):
    raise NotImplementedError("Message", "prepare_message", None,
                      "El usuario no ha implementado este método")

DDMessage

from messages.message import Message
from constants import MESSAGES
from constants import LANGUAGE


class DDMessages(Message):


    def __init__(self, language):
        super().__init__(language)

    def set_message(self, language):
        if language == LANGUAGE.SPANISH:
            self.set_message(MESSAGES.DD_ESP_MESSAGE)
        else:
            self.set_message(MESSAGES.DD_ENG_MESSAGE)

    def prepare_message(self):
        pass

我究竟做错了什么?我正在使用 python 3。

标签: pythonpython-3.x

解决方案


问题是它set_message()自己调用。这就是递归的意思。我认为递归在这里不合适。相反,您应该设置实例的消息字段:

def set_message(self, language):
    if language == LANGUAGE.SPANISH:
        self.message = MESSAGES.DD_ESP_MESSAGE
    else:
        self.message = MESSAGES.DD_ENG_MESSAGE

不过,这只是一个猜测。如果这不是你想要的,你需要离开你的电脑,弄清楚你想要做什么。如果您需要进一步的帮助,请不要犹豫,提出一个新问题,更详细地描述您正在尝试做什么。


推荐阅读