в @staticmethod ?
Избавиться от обеих, сделать нормальные методы или обычные функции
Задача сама такая. Я бы с радостью. Я вообще считаю, что классы нужны для того, чтобы работать с их экземплярами, а посему @classmethod и @staticmethod - это абсолютно ненужная байда
Тогда исходную формулировку бы
Реализовать класс «Дата», функция-конструктор которого должна принимать дату в виде строки формата «день-месяц-год». В рамках класса реализовать два метода. Первый — с декоратором @classmethod. Он должен извлекать число, месяц, год и преобразовывать их тип к типу «Число». Второй — с декоратором @staticmethod, должен проводить валидацию числа, месяца и года (например, месяц — от 1 до 12). Проверить работу полученной структуры на реальных данных.
Не вижу чтобы надо было их передавать
Ну, не совсем ненужная, но очень специфическая и часто используемая не к месту.
У меня вот сейчас такой код получился: https://dpaste.org/CGOMm Откуда второй метод должен получать число, чтобы работать с ним?
Из параметра. Кстати, тут статикметод хоть и с натяжкой, но уместен. Что хотели в части с классметодом - ч так и не понял.
Вот именно, что задача охинейская. Мне 1 тимлид сказал, что эти задачи просто на проверку знаний. На практике не всё оттуда надо будет
Можно пример кода как мне из параметра это получить?
@staticmethod def is_month_valid(month: int): return month in range(1, 13)
Ну а month-то мы что? Повторно должны указывать? Ведь, мы же изначально строку передаём экземпляру класса...
Просто на классметод можно было вполне нормальную сделать. И вероятно, так и задумывали, но не смогли сформулировать. Это при условии что ты оригинальное условие дал, а не вольный пересказ.
Нет никакого экземпляра класса в случае статикметода. Он на случай, если нам нужна функция, неразрывно связанная с классом по смыслу, но при этом не имеющая дела с его объектами. Случай редкий и часто уместнее всего это делать отдельной функцией вне класса, а не статикметодом.
Блин. Ну условие задачи теперь такое. Ну так, как всё-таки сделать это извращение: то есть, как функцию, обёрнутую в @classmethod, передать в другую функцию, обёрнутую в @staticmethod ?
В данном случае у тебя этим статикметодом может пользоваться сам конструктор при сборке даты, либо ты можешь зарание провалидировать что-то снаружи, чтобы проверить, соответствует ли какое-то число ограничениям.
Ты текст условия привёл как есть? В том что ты копировал раньше - ничего такого не было.
И где ты тут высосал из пальца передачу одной функции в другую?
Ну так, это же логически понятно. Зачем дублировать то, что мы должны получить?
Нет, это логически бессмысленно. Прочитай условие нормально и определи, чего от тебя хотят.
То есть, всё-таки дублировать придётся?
Дублировать что?
То, что мы передаём сначала классу (то есть, дату в виде строки). Кстати, классметод над ним уже определённую работу проводит. То есть, нужно ту же работу дублировать в статикметоде???
У тебя слова рассыпались. :-)
Вот эту: @classmethod def get_day_month_year(cls, obj): return [int(n) for n in obj.day_month_year.split("-")] То есть, преобразование строки в список чисел
И в чем проблема вызвать этот метод?
Ну так, и как мне этот метод вызвать, то есть, передать статик-методу? Можно, хотя бы, пример кода?
Так вызвать или передать?
Вот мой текущий вариант кода (вопросительные знаки для того, чтобы мне помогли): https://dpaste.org/1w05t Хочу функцию get_day_month_year передать функции get_valid_date ДЛЯ ДАЛЬНЕЙШЕЙ РАБОТЫ С НЕЙ Как мне это сделать?
Господи, ты отличаешь слова вызвать и передать?
Где вообще в тексте задачи указано, что один метод нужно передать в другой?
Не надо тебе передавать функцию. Тебе надо вызвать
Ой, там даже вызывать не очень надо. По крайней мере в таком виде.
Обсуждают сегодня