Не одобряется ли динамическое добавление атрибутов в Python?

В Python вы можете назначить произвольный атрибут извне определяющего класса :

class Profile(models.Model):
    user = models.OneToOneField(User)  
    name = models.CharField(max_length=140)

p = Profile()
p.age = 42

Базовый механизм здесь - атрибут __ dict __ , который поддерживает словарь всех атрибутов.

Нам всем сказали не раскрывать нашу внутреннюю работу клиентскому коду , но присоединение новых данных не имеет никакого отношения к инкапсуляции, верно? Распространена ли эта идиома для кода Python?


Just What I Mean…

Каждый твит имеет стандартные поля, например id , text , ] владелец .
При возврате списка твитов для пользователя вы хотите отображать, добавлен ли твит в избранное этим пользователем.

Очевидно, чтобы получить is_favorite , вам нужно запросить отношение «многие ко многим» для этого пользователя .
Можно ли предварительно заполнить Tweet объекты с помощью is_favorite , соответствующего текущему пользователю ?

Конечно, я могу разоблачить метод is_favorite_for (user) , но я сталкиваюсь с ограничениями языка шаблонов Django , которые не позволяют вызывать методы с аргументами изнутри шаблона. Кроме того, я считаю , что шаблон вообще не должен вызывать методы .


Я знаю, что это сработает нормально, но мне интересно, может ли выполнение чего-то подобного в проекте с открытым исходным кодом заставить других разработчиков смотреть на меня с презрением.

Примечания:

Я пришел из C # /. NET, где динамические типы были введены совсем недавно и не адаптированы широко, за исключением некоторых нишевых областей (совместимость, инфраструктуры IoC, клиентские инфраструктуры REST и т. Д.).

5
задан Community 23 May 2017 в 10:34
поделиться