In a blog post analyzing Python PDF libraries,S.Lott发表以下评论:
这是编程非常糟糕的一个例子:
#Connect the parser and document objects.
parser.set_document(doc)
doc.set_parser(parser)
只需要这两个中的一个;另一个是作为setter方法的一部分处理的。
通过setter方法执行此操作的Pythonic方法是什么?
答案 0 :(得分:2)
我猜作者的意思是:
class Parser(object):
def set_document(self, doc):
self.doc = doc
doc.parser = self
其他二传手set_parser()
可以说是多余的。
答案 1 :(得分:2)
class Parser(object):
def set_document(self, doc):
doc.set_parser(self)
# whatever
虽然在实践中,我会重新设计文档和解析器类以避免循环引用。除非使用弱引用,否则它们不仅会增加概念复杂性,还会干扰垃圾收集。