2014-01-15 24 views
0

我正在尝试使用Python生成LaTeX文档。我为不同类型的内容使用类,它们最终需要转换为可由LaTeX编译的文档中的字符串。 __str__是否是正确的功能,或者是为了更多consise类的摘要,我应该在这种情况下使用类似.render以特殊方式使用__str__

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

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

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' 

回答

1

STR方法被认为“含有一个对象的一个​​很好的可打印表示的字符串”(见http://docs.python.org/2/library/functions.html#str)。我会说格式化命令不适合那里(即使使用LaTeX的最终目标通常是为了获得很好的打印效果),并且正如您所建议的那样,render方法更合适。

下面是使用+的简单字符串连接将不会为您进行格式化 - 但另一方面,“显式优于隐式”是Python的Zen(请参阅http://www.python.org/dev/peps/pep-0020/)的一部分。

+0

这是最讨厌的事情的事情是,我不能简单地互换实际字符串和我的专班,因为我有时不得不调用一个方法。 – JelteF

0

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

如果你只是想产生乳胶,说把它写到标准输出则是有效的。如果你想要一个更灵活的实现(比方说Latex,你需要Markdown),我会给另一个知道如何根据输出处理每种类型的类给出响应。 (这会是一个更加Java的杂交方法)

class LatexContentRender: 

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