python - 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。
解决方案
问题是它set_message()
自己调用。这就是递归的意思。我认为递归在这里不合适。相反,您应该设置实例的消息字段:
def set_message(self, language):
if language == LANGUAGE.SPANISH:
self.message = MESSAGES.DD_ESP_MESSAGE
else:
self.message = MESSAGES.DD_ENG_MESSAGE
不过,这只是一个猜测。如果这不是你想要的,你需要离开你的电脑,弄清楚你想要做什么。如果您需要进一步的帮助,请不要犹豫,提出一个新问题,更详细地描述您正在尝试做什么。
推荐阅读
- vb.net - 停止在 UserControl 的特定区域引发 Click 事件
- apache - 缓存阻止 .htaccess 重定向
- javascript - 如何在 HTML 页面上添加 lunr(或 elasticlunr)搜索?
- postgresql - 从 jpa 存储库调用函数 postgresql
- node.js - 为什么 node-sodium 包不起作用
- python - 在 Windows 中的 Python 3.7.0 上安装 wxPython 4.0.7 时遇到问题
- java - Java中输入1到5之间的数字
- javascript - 如何改进多个客户端的配置文件
- reactjs - 如何在reactJs中调用具有参数的箭头函数
- python - 如何使用 Python Core API (Apache Spark) 加入三个 RDD?