class Child(SomeBaseClass):
def __init__(self):
SomeBaseClass.__init__(self)
Это довольно легко понять.
class Child(SomeBaseClass):
def __init__(self):
super(Child, self).__init__()
Хорошо, что происходит сейчас, если вы используете super(Child,self)
?
Когда создается экземпляр Child, его MRO (порядок разрешения метода) находится в порядке (Child, SomeBaseClass, object) на основе наследования. (предположим, что у SomeBaseClass нет других родителей, кроме объекта по умолчанию).
Передавая Child, self
, super
выполняет поиск в MRO экземпляра self
и возвращает прокси-объект next of Child , в этом случае это SomeBaseClass, этот объект затем вызывает метод __init__
для SomeBaseClass. Другими словами, если это super(SomeBaseClass,self)
, то прокси-объект, который возвращает super
, будет object
. Для множественного наследования MRO может содержать много классов, поэтому в основном super
позволяет вам решить, где вы хотите начать поиск в MRO.
@ Ответ Суджоя указывает в полезном направлении. Вы можете добавить номера строк, отсортировать и разбить номера строк:
(cat -n file1 ; cat -n file2 ) | sort -n | cut -f2-
Примечание (меня интересует) для этого требуется немного больше работы, чтобы получить право на заказ, если вместо статических файлов вы используете вывод команд, которые могут работать медленнее или быстрее друг друга. В этом случае вам необходимо добавить / отсортировать / удалить другой тег в дополнение к номерам строк:
(cat -n <(command1...) | sed 's/^/1\t/' ; cat -n <(command2...) | sed 's/^/2\t/' ; cat -n <(command3) | sed 's/^/3\t/' ) \
| sort -n | cut -f2- | sort -n | cut -f2-
Вот такой способ GUI: вставьте их в два столбца в электронную таблицу, скопируйте все ячейки, затем используйте регулярные выражения, чтобы заменить вкладки на новые строки.
Вот решение, использующее awk
:
awk '{print; if(getline < "file2") print}' file1
производит этот вывод:
line 1 from file1
line 1 from file2
line 2 from file1
line 2 from file2
...etc
Использование awk
может быть полезно, если вы хотите добавить дополнительное форматирование к выходу, например, если вы хотите пометить каждую строку на основе того, из какого файла она поступает:
awk '{print "1: "$0; if(getline < "file2") print "2: "$0}' file1
производит этот вывод:
1: line 1 from file1
2: line 1 from file2
1: line 2 from file1
2: line 2 from file2
...etc
Примечание: этот код предполагает что файл1 имеет большую или равную длину для файла2.
Если файл1 содержит больше строк, чем file2, и вы хотите вывести пустые строки для файла2 после его завершения, добавьте предложение else в тест getline:
awk '{print; if(getline < "file2") print; else print ""}' file1
или
awk '{print "1: "$0; if(getline < "file2") print "2: "$0; else print"2: "}' file1
cat file1 file2 |sort -t. -k 2.1
Здесь указано, что разделитель «.» и что мы сортируем по первому символу второго поля.
man sort
для получения дополнительной информации.
– Sujoy
25 October 2010 в 16:05
paste
довольно ограничено - например, на Solaris вы можете иметь не более 12 входных файлов, а выходные линии ограничены 511 символами. – user667489 3 December 2015 в 20:14