Где использовать input в методе

У меня есть класс и в конструкторе есть пустой список. Мне нужно через метод класса добавить пустую строку, но с последующим использованием input.

 class Table:
    def __init__(self, table):
        self.table = []

    def add_row(self, str_new):
        self.table.append(str_new)

Куда вставлять input?


Ответы (2 шт):

Автор решения: Amgarak

Зачем передаете параметр в __init__, но его никак не используете? Убираем..

Зачем в add_row передавать что-то, если ожидаем вызов input в методе? Убираем..

Получаем что-то такое:

class Table:
    def __init__(self):
        self.table = []

    def add_row(self):
        str_new = input()
        self.table.append(str_new)
        
tb = Table()
tb.add_row()
print(tb.table)

Вывод:

Привет
['Привет']

[Program finished]
→ Ссылка
Автор решения: insolor

В методе лучше никак не использовать. Вводите снаружи, и передавайте в метод через параметр. Если вы прямо в метод вшиваете input, то вы гвоздями прибиваете ваш класс к конкретно консольному способу ввода. А если вдруг вам нужно будет консольную программу переделать на GUI? Или просто из файла добавлять элементы — будете создавать отдельный метод для каждого способа добавления элемента?

У вас есть один универсальный метод добавления элемента, который можно использовать с любым способом ввода данных. Вшивать в сам метод один конкретный способ ввода не нужно - так теряется универсальность. Добавлять отдельные методы просто для ввода одной строки (допустим, через input) - тоже не нужно, это просто излишне.

Хорошая идея в целом - не прятать ввод-вывод внутрь своих классов или функций, а оставлять снаружи, максимально видимым.

В общем, просто вызывайте input снаружи, его результат передавайте в метод:

class Table:
    def __init__(self):
        self.table = []

    def add_row(self,str_new):
        self.table.append(str_new)


table = Table()
table.add_row(input())
→ Ссылка