Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 28, 2010 22:29:03

st01en
От:
Зарегистрирован: 2010-09-14
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с ООП

Привет,

В своем скрипте хочу использовать OptionParser из модуля optparse
по независящим от меня причинам, могу использовать только python2.4, с версией optparse 1.5a2
В этой версии еще нет возможности указать атрибут epilog (который будет в справке выводиться после списка опций), а мне он ну очень нужен. Поэтому решил, что правильно будет сделать свой класс OptionParserRawEpilog наследующий OptionParser и переопределить в нем метод format_help
Должно получится что-то типа такого

from optparse import OptionParser

class OptionParserRawEpilog(OptionParser):

#догадываюсь, что здесь чего-то не хватает

def format_help(self, formatter=None):
if formatter is None:
formatter = self.formatter
result = []
if self.usage:
result.append(self.get_usage() + "\n")
if self.description:
result.append(self.format_description(formatter) + "\n")
result.append(self.format_option_help(formatter) + "\n")
if self.epilog:
result.append(self.epilog + "\n")
return "".join(result)

#.....
usage= "usage info"
description = "description of script"
epilog = "epilog - examples of usage, additional info, etc.)"
parser = OptionParserRawEpilog(usage=usage, description=description, epilog=epilog)
#.....
Понятное дело, что в таком виде он ругается на то, что OptionParserRawEpilog instance has no attribute ‘epilog’. А вот как сделать, что б он там был и были остальные атрибуты с родительского класса, я что-то не пойму. Было б время - разобрался и сам, но времени как обычно нету :(

Заранее спасибо.



Отредактировано (Окт. 28, 2010 22:50:13)

Офлайн

#2 Окт. 29, 2010 00:17:51

pill
От:
Зарегистрирован: 2010-08-27
Сообщения: 223
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с ООП

Нужно переопределить __init__ метод класса и добавить атрибут epilog

from optparse import OptionParser

class OptionParserRawEpilog(OptionParser):
#Переопределяем конструктор класа добавляя новый вхдной параметр
def __init__(self, переменные класа OptionParser +, epilog=None)
#Вызываем конструктор родительского класса что-бы были родные переменные
OptionParser.__init__(self, переменные класа OptionParser)
self.epilog = epilog #Добавляем атрибут эпилог

def format_help(self, formatter=None):
...
Теоретически как-то так. Возможности проверить к сожалению нету.
PS: Что это подсветка поламалась… :/



Отредактировано (Окт. 29, 2010 00:21:27)

Офлайн

#3 Окт. 29, 2010 00:57:56

st01en
От:
Зарегистрирован: 2010-09-14
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с ООП

Спасибо, все верно, отлично работает.

Получилось так

from optparse import OptionParser, Option

class OptionParserRawEpilog(OptionParser):

def __init__(self,
usage=None,
option_list=None,
option_class=Option,
version=None,
conflict_handler="error",
description=None,
formatter=None,
add_help_option=True,
prog=None,
epilog=None):
OptionParser.__init__(self, usage, option_list, option_class, version,
conflict_handler, description, formatter, add_help_option, prog)
self.epilog = epilog

def format_help(self, formatter=None):
if formatter is None:
formatter = self.formatter
result = []
if self.usage:
result.append(self.get_usage() + "\n")
if self.description:
result.append(self.format_description(formatter) + "\n")
result.append(self.format_option_help(formatter) + "\n")
if self.epilog:
result.append(self.epilog + "\n")
return "".join(result)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version