Python:递归调用抽象方法

时间:2018-10-09 19:00:06

标签: python python-3.x

我有一个名为Message的主类和一个名为DDMessage的子类。当我使用以下方法创建对象DDMessage时:

m = DDMessages(row["language"])

我遇到了这个错误:

enter image description here

每个类的代码都是...

消息

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。

1 个答案:

答案 0 :(得分:2)

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

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

不过,这只是一个猜测。如果这不是您想要的,则需要离开计算机,然后确定要做什么。如果您需要进一步的帮助,请随时提出一个新问题,以更详细地描述您要做什么。