在一篇分析 Python PDF 库的博文中,S.Lott发表了以下评论:
这是一个非常糟糕的编程示例:
#Connect the parser and document objects.
parser.set_document(doc)
doc.set_parser(parser)
只需要这两者之一;另一个作为 setter 方法的一部分被简单处理。
通过 setter 方法执行此操作的 Pythonic 方式是什么?
在一篇分析 Python PDF 库的博文中,S.Lott发表了以下评论:
这是一个非常糟糕的编程示例:
#Connect the parser and document objects.
parser.set_document(doc)
doc.set_parser(parser)
只需要这两者之一;另一个作为 setter 方法的一部分被简单处理。
通过 setter 方法执行此操作的 Pythonic 方式是什么?
我猜作者的意思是这样的:
class Parser(object):
def set_document(self, doc):
self.doc = doc
doc.parser = self
另一个 setterset_parser()
可以说是多余的。
class Parser(object):
def set_document(self, doc):
doc.set_parser(self)
# whatever
尽管在实践中,我会重新设计文档和解析器类以避免循环引用。它们不仅增加了概念上的复杂性,而且还会干扰垃圾收集,除非使用弱引用。