Skip to content

fix: 优化__str__输出格式 #58

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

captainSuo
Copy link

问题描述

ChatbotMessage.__str__() 直接返回原始字符串内容,未通过 repr() 处理,导致:

  • 输出不含引号,无法区分空字符串 "" 和不存在内容。
  • 转义字符(如 \n\t)显示为实际控制字符,而非转义形式,降低日志可读性。

建议修复

遵循 Python 惯例:

  • __str__: 返回友好字符串(可保持当前行为,但建议至少包裹引号)。
  • __repr__: 返回明确表示,如 ChatbotMessage(content={self.content!r}, ...)

当前方法

def __str__(self):
    return 'ChatbotMessage(message_type=%s, text=%s, sender_nick=%s, conversation_title=%s)' % (
        self.message_type,
        self.text,
        self.sender_nick,
        self.conversation_title,
    )
# 返回值:
# ChatbotMessage(message_type=text, text=你好
# 世界, sender_nick=张三, conversation_title=None)
# 注意⚠ '\n'换行符会直接换行,导致日志难以阅读

改进方法

def __repr__(self):
    return (
        f"ChatbotMessage(message_type={self.message_type!r}, text={self.text!r}, "
        f"sender_nick={self.sender_nick!r}, conversation_title={self.conversation_title!r})"
    )
# 返回值:
# ChatbotMessage(message_type='text', text='你好\n世界', sender_nick='张三', conversation_title=None)
# 不会影响日志显示

另外,Python 中__str____repr__的调用规则如下:

  1. str(obj)会先尝试调用__str__,如果没有则使用__repr__作为后备
  2. repr(obj)直接调用__repr__,永远不会调用__str__
  3. 如果两个方法都未定义,最终会使用 object 类的默认实现

因此建议定义ChatbotMessage__repr__方法,以提供更明确的表示方式。

另外,我的formatter自动优化了代码里的一些格式

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant