2014-09-30 1 views
0

Подойдя к делу, я новичок в объектно-ориентированном программировании, изучая Python, я написал простую процедурную программу, которая принимает URL-адрес и извлекает данные из URL-адреса в текстовый файл.как я могу объектно ориентировать простое приложение для копирования веб-сайтов?

Код выглядит примерно так: Просто проигнорируйте переменные, его состав!

def open_URL(url): 
    # try the URL 
    # except errors 

def fetch_raw_content(url): 
    # fetch the raw content from web 
    # return raw_content 

def clean_up_raw(raw_content): 
    # clean up html tags and stuff 
    # format the raw content 
    # return content 

def write_to_file(filename, content): 
    # create a file with filename 
    # open the file 
    # write the content 
    # close the file 


raw = fetch_raw_content(open(open_URL("somesite.com"))) 

content = clean_up_raw(raw) 
write_to_file(content) 

Я хотел бы знать, если я могу сделать это объектно-ориентированный путь, так как мое воздействие на объектно-ориентированном мире ограничено, если какой-либо один предложить мне, как я могу возразить-Ориент эту программу, Спасибо. :)

+1

Здесь вам не нужен ООП, только одна функция «точки входа», которая берет 'url' и' filename' и вызывает ваши другие функции по очереди. – jonrsharpe

+0

FWIW, я полагаю, вы делаете это как упражнение, но если вам действительно нужно сделать серьезную паузу в Python, вы можете проверить [Scrapy] (http://doc.scrapy.org/en/latest/ интро/overview.html). – jdehesa

ответ

0

OOP - это инструмент, предназначенный для устранения проблем с дизайном кода. Нет проблем с вашим дизайном, и нечего исправить. ООП будет платить только за себя, если вам действительно нужен код, который будет более абстрактным и настраиваемым. Например, в какой-то более поздний момент вы можете понять, что ваш «контент» может быть получен из разных источников, а не только из URL-файлов - файлов, баз данных и т. Д. В этом случае вы можете «очистить» часть чтения, создав абстрактный класс Reader и конкретные «читателей» для каждого типа источника:

class Reader: 
    def read(): 
     # return the content 

class URLReader(Reader)... 

class FileReader(Reader)... 

class DatabaseReader(Reader)... 

Аналогично, если процесс «очистки» можно разделить на этапы, и вы хотите применить только некоторые из них в каждом конкретном случае, вы можете абстрактном это как это:

class Action: 
    def apply(content): 
     # apply the action to the content 

class RemoveWhiteSpace(Action)... 

class RemoveFontTags(Action)... 

class OptimizeLineBreaks(Action)... 

class Sequence(Action)... 

, а затем:

content = Sequence(RemoveWhiteSpace(), OptimizeLineBreaks()).apply(content) 

И все же эти усилия оплачиваются только для вас, если вам действительно нужна такая гибкость. В большинстве случаев вы можете решить любую проблему в Python без использования ключевого слова class.

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