#python #python-3.x
#python #python-3.x
Вопрос:
class Exercise:
def __init__(self, *args):
self.args = args
def format(self, mode):
if mode == "order":
return "{2} - {1} - {0}".format(*self.args)
ex = Exercise()
s = ex.format('order').format('third', 'second', 'first')
print(s)
Я попытался запустить этот код, но он вернул ошибку, как указано в названии. Что я здесь делаю не так?
Комментарии:
1. Мне непонятно, как вы ожидаете, что это будет работать. Вы не можете связывать вызовы методов и предполагать, что он будет помнить «что-то» (например, состояние) между вызовами
Ответ №1:
Вы форматируете с self.args
format()
помощью метода.
return "{2} - {1} - {0}".format(*self.args)
Но вы не передали ни args
одного инициализатору:
ex = Exercise()
И при вызове этого метода вы вызываете format
возвращаемое значение этого метода:
s = ex.format('order').format('third', 'second', 'first')
Что эффективно:
"{2} - {1} - {0}".format([])
Что приводит к ошибке. Вы должны передать аргументы формата инициализатору класса:
ex = Exercise('third', 'second', 'first')
s = ex.format('order')
print(s)
В качестве альтернативы, чтобы заставить код работать, вы можете сделать это:
class Exercise:
def format(self, mode):
if mode == "order":
return "{2} - {1} - {0}"
Который должен работать с остальной частью вашего кода без изменений
Комментарии:
1. Почему вы создали этот метод, а не использовали
__repr__
or__str__
?2. Ну, я почти уверен, что они этого не делают, потому что они связывают вызовы методов, которые ничего не возвращают
3. Но это был не тот вопрос, который они задавали.
4. Есть ли способ заставить это работать, только внеся изменения в метод? Это учебный материал, которому я следую, и в нем говорится, что
s = ex.format('order').format('third', 'second', 'first')
он должен возвращать результатfirst - second - third
Ответ №2:
Вам нужно передать аргументы формата инициализатору класса, вот как должен быть ваш код :
class Exercise:
def __init__(self, *args):
self.args = args
def format(self, mode):
if mode == "order":
return "{} - {} - {}".format(*self.args)
ex = Exercise('third', 'second', 'first')
s = ex.format('order')
print(s)