以特殊方式使用__str__

时间:2014-01-15 20:00:14

标签: python latex

我正在尝试使用Python生成LaTeX文档。我正在为不同类型的内容使用类,并且最终需要将它们转换为可由LaTeX编译的文档中的字符串。 __str__是否适合这个功能,或者是为了更详细的类摘要,在这种情况下我应该使用类似.render的内容吗?

我感到困惑的主要原因是大多数对象没有被转换为字符串作为最终目标。

这是包行的示例类。请记住,整个文档也是一个具有相同实现的类,可以转换为字符串。

class Package:

    """A class that represents a package"""

    def __init__(self, name, option=None):
        self.name = name
        self.option = option

    def __str__(self):
        if self.option is None:
            option = ''
        else:
            option = '[' + self.option + ']'

        return r'\usepackage' + option + '{' + self.name + '}\n'

2 个答案:

答案 0 :(得分:1)

str 方法应该是“包含对象的可打印表示的字符串”(请参阅​​http://docs.python.org/2/library/functions.html#str)。我会说格式化命令不适合那里(即使使用LaTeX时的最终目标通常是获得可以打印的东西),并且正如您所建议的那样render方法更合适。

缺点是使用+的简单字符串连接将不会为您进行格式化 - 但另一方面,“显式优于隐式”是Python的Zen的一部分(请参阅{ {3}})。

答案 1 :(得分:0)

这是一个设计问题,取决于您的项目的规模和可扩展性。你可以在这里找到 str 方法的一个很好的解释:What is the purpose of __str__ and __repr__ in Python?

如果您只想生成Latex并将其写入STDOUT,那么它是有效的。如果你想要一个更灵活的实现(比如你想要Markdown代替Latex),我会将责任推给另一个知道如何根据输出处理每种类型的类。 (那将是一种更加Java风格的方法)

class LatexContentRender:

     def render(content_item):
         # do stuff and get the important 
         # components from the content_item