Понимание Python super () с помощью методов __init __ () [duplicate]

Вот мой вывод ответа пользователя2660112 - один метод, чтобы вернуть ячейку для вставки в граничную и фоновую таблицу и аналогичный, но без полей / бесцветный сорт:

private static PdfPCell GetCellForBorderedTable(Phrase phrase, int align, BaseColor color)
{
    PdfPCell cell = new PdfPCell(phrase);
    cell.HorizontalAlignment = align;
    cell.PaddingBottom = 2f;
    cell.PaddingTop = 0f;
    cell.BackgroundColor = color;
    cell.VerticalAlignment = PdfPCell.ALIGN_CENTER;
    return cell;
}

private static PdfPCell GetCellForBorderlessTable(Phrase phrase, int align)
{
    PdfPCell cell = new PdfPCell(phrase);
    cell.HorizontalAlignment = align;            
    cell.PaddingBottom = 2f;
    cell.PaddingTop = 0f;
    cell.BorderWidth = PdfPCell.NO_BORDER;
    cell.VerticalAlignment = PdfPCell.ALIGN_CENTER;
    return cell;
}

Они могут затем называть так:

Font timesRoman9Font = FontFactory.GetFont(FontFactory.TIMES_ROMAN, 9, BaseColor.BLACK);
Font timesRoman9BoldFont = FontFactory.GetFont(FontFactory.TIMES_BOLD, 9, BaseColor.BLACK);

Phrase phrasesec1Heading = new Phrase("Duckbills Unlimited", timesRoman9BoldFont);
PdfPCell cellSec1Heading = GetCellForBorderedTable(phrasesec1Heading, Element.ALIGN_LEFT, BaseColor.YELLOW);
tblHeadings.AddCell(cellSec1Heading);

Phrase phrasePoisonToe = new Phrase("Poison Toe Toxicity Level (Metric Richter Scale, adjusted for follicle hue)", timesRoman9Font);
PdfPCell cellPoisonToe = GetCellForBorderlessTable(phrasePoisonToe, Element.ALIGN_LEFT);
tblFirstRow.AddCell(cellPoisonToe);
2312
задан U10-Forward 5 July 2018 в 07:48
поделиться

2 ответа

super() позволяет Вам постараться не относиться к базовому классу явно, который может быть хорошим. Но основное преимущество идет со множественным наследованием, где все виды забавный материал могут произойти. Посмотрите стандартные документы о супер , если Вы уже не имеете.

Примечание, что синтаксис, измененный в Python 3.0 : можно просто сказать super().__init__() вместо super(ChildB, self).__init__(), какой IMO вполне немного более хорош. Стандартные документы также относятся к руководство по использованию супер () , который является довольно объяснительным.

1694
ответ дан Sheldore 5 July 2018 в 17:48
поделиться

Нет, действительно. super() взгляды на следующий класс в MRO (порядок разрешения метода, к которому получают доступ с cls.__mro__) для вызова методов. Просто назвав основу __init__ вызовы основа __init__. Как это происходит, MRO имеет точно один объект - основа. Таким образом, Вы действительно делаете ту же самую вещь, но более хорошим способом с super() (особенно при вхождении во множественное наследование позже).

52
ответ дан Devin Jeanpierre 5 July 2018 в 17:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: