@exctac

PEP 8: Метод класса перед свойствами?

Добрый день!

Обычно методы класса принято описывать после свойств, вопрос не будет ли критично если описать его перед ними, а не после? А именно в модели джанго:
def get_default_sound(self):
    pass

class A(model.Model):
    sound = models.CharField(_('Название'), max_length=255, default=get_default_sound)

А можно ли так?
class A(model.Model):
    def get_default_sound(self):
        pass

    sound = models.CharField(_('Название'), max_length=255, default=get_default_sound)


Дело в том что выносить функцию за класс, когда это функция нужна только для класса, не совсем красиво и не явно выглядит в коде. но и в классе перед свойством его описывать тоже как то не очень. Если описать под свойством то параметр default не видит функцию.

Как быть?))) хотелось бы узнать именно мнение основанное на принятых офф. соглашениях, без холиваров.
  • Вопрос задан
  • 174 просмотра
Решения вопроса 2
@Stqs
senior software developer
exctac,

1) нужно выпилить pep-8 из тегов
2) тут вопрос не в конвенциях а в логике вашего приложения
если функция get_default_sound по сути статическая или должна шариться между классами - то почему бы не иметь ее в одном экземпляре на уровне модуля
если же она ни с кем не шарится - желательно не выносить ее за область видимости класса
как говорили классики "держите определение как можно ближе к использованию". это касается не только расположения строчек кода но и расположение в стопке областей видимости

так что как по мне то тут вопрос не в соглашениях а именно в архитектуре вашего приложения
если хотите быть consistent с django то вот взгляните например сюда
https://docs.djangoproject.com/en/2.0/ref/contrib/...
тут как раз оба варианта представлены

class A(object):

    @staticmethod
    def get_val():
        return 42

    val = get_val.__func__()


print A.val
Ответ написан
Комментировать
@exctac Автор вопроса
get_default_sound статическая по сути, и не где не используется. вопрос лишь в том

в классе перед свойством его описывать тоже как то не очень. Если описать под свойством, то параметр default не видит функцию.


можно ли описывать статичный метод перед свойством?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы