2012-05-03 2 views
0

In a blog post analyzing Python PDF libraries, S.Lott делает следующий комментарий:Более вещий способ «соединить» два объекта

Вот один пример удивительно плохого программирования:

#Connect the parser and document objects.  
parser.set_document(doc)  
doc.set_parser(parser) 

Только один из этих двух требуется; другой тривиально обрабатывается как часть метода сеттера.

Что такое Pythonic способ сделать это с помощью метода setter?

ответ

2
class Parser(object): 
    def set_document(self, doc): 
     doc.set_parser(self) 
     # whatever 

Хотя на практике я бы пересмотрел классы документов и парсеров, чтобы избежать круговых ссылок. Они не только дополняют концептуальную сложность, но и мешают сборке мусора, если не используются слабые ссылки.

2

Я думаю, что автор имеет в виду это:

class Parser(object): 
    def set_document(self, doc): 
    self.doc = doc 
    doc.parser = self 

Другой сеттер, set_parser(), можно утверждать, излишним.

Смежные вопросы