Это другие примеры:
print("Item 5: " + str(numpy_array[5]) ) #=> Item 5: [210 553]
print("Item 5: ", numpy_array[5][0], numpy_array[5][1] ) #=> Item 5: 210 553
print("Item 5: ", numpy_array[5][0], "-" , numpy_array[5][1] ) #=> Item 5: 210 553
print (f"Item 5: {numpy_array[5][0]}, {numpy_array[5][1]}" ) #=> Item 5: 210, 553
Замечательно, что Вы изучаете инверсию управления и внедрение зависимости.
, Но для Вашего вопроса, существует другое понятие, которое Вы могли бы хотеть изучить: аспектно-ориентированное программирование.
В.NET, существуют некоторые хорошие платформы, доступные для того, чтобы сделать аспектно-ориентированное программирование, включая Замок, LinFu и Инжекционный Политикой Блок приложений Microsoft. На самом деле некоторые контейнеры инверсии управления имеют некоторые аспектно-ориентированные функции в них также.
Эти понятия и инструменты помогают сделать проблемы, такие как вход, занимают фоновое место с точки зрения шума кода и делают быть обработанным автоволшебно.
Мой совет? Перенесите регистрирующиеся интерфейсы в свое собственное. Я взял зависимость от Log4Net однажды, был записан и должен был осуществить рефакторинг много моих проектов из-за него.
Это не будет полным ответом, но одно соображение будет состоять в том, что при введении ILog через конструктора класса, можно затем дразнить ту платформу журналирования за поблочное тестирование. Другие мысли... Метод set свойства для передачи в ILog означает, что Вы не можете зарегистрировать действия от конструктора. Кроме того, Вы не знаете наверняка, если Ваш экземпляр даже имеет доступное значение ILog, что необходимо перенести каждый вызов с тестом для допустимого экземпляра ILog.
Я придерживался бы введения его и использования интерфейса. Главным образом упрощать тестирование. Создание его легче заменить насмешкой или тупиком при тестировании объекта потребления.
я базировался бы, использовал ли я конструктора или инжекцию метода set на важности журнала к классу потребления. Если бы Вы хотите, чтобы это было очень важно затем, что я одобрил бы инжекцию конструктора, если дополнительный затем метод set.
я не вижу, где использование метода фабрики не могло работать с контейнером, однако, это затем делает тестирование потребительского класса зависящим от надлежащей конфигурации этого метода фабрики.