В Python вы можете назначить произвольный атрибут извне определяющего класса :
class Profile(models.Model):
user = models.OneToOneField(User)
name = models.CharField(max_length=140)
p = Profile()
p.age = 42
Базовый механизм здесь - атрибут __ dict __
, который поддерживает словарь всех атрибутов.
Нам всем сказали не раскрывать нашу внутреннюю работу клиентскому коду , но присоединение новых данных не имеет никакого отношения к инкапсуляции, верно? Распространена ли эта идиома для кода Python?
Каждый твит
имеет стандартные поля, например id
, text
, ] владелец
.
При возврате списка твитов для пользователя вы хотите отображать, добавлен ли твит в избранное этим пользователем.
Очевидно, чтобы получить is_favorite
, вам нужно запросить отношение «многие ко многим» для этого пользователя
.
Можно ли предварительно заполнить Tweet
объекты с помощью is_favorite
, соответствующего текущему пользователю ?
Конечно, я могу разоблачить метод is_favorite_for (user)
, но я сталкиваюсь с ограничениями языка шаблонов Django , которые не позволяют вызывать методы с аргументами изнутри шаблона. Кроме того, я считаю , что шаблон вообще не должен вызывать методы .
Я знаю, что это сработает нормально, но мне интересно, может ли выполнение чего-то подобного в проекте с открытым исходным кодом заставить других разработчиков смотреть на меня с презрением.
Примечания:
Я пришел из C # /. NET, где динамические типы были введены совсем недавно и не адаптированы широко, за исключением некоторых нишевых областей (совместимость, инфраструктуры IoC, клиентские инфраструктуры REST и т. Д.).