在 Python 中,您可以从定义类之外分配任意属性:
class Profile(models.Model):
user = models.OneToOneField(User)
name = models.CharField(max_length=140)
p = Profile()
p.age = 42
这里的底层机制是__dict__
维护所有属性的字典的属性。
我们都被告知不要将我们的内部工作暴露给客户端代码,但是附加新数据根本与封装无关,对吧?这个成语在 Python 代码中很常见吗?
就是我的意思……</h2>
每个Tweet
都有标准字段,例如id
, text
, owner
。
当返回一个用户的推文列表时,你想显示一条推文是否被这个用户“收藏”。
显然,要获得这个,is_favorite
您需要查询多对多关系user
。
可以用当前用户对应的对象预填充Tweet
对象is_favorite
吗?
当然我可以公开一个方法is_favorite_for(user)
,但是我遇到了Django 模板语言限制,它不允许从模板内部调用带有参数的方法。另外,我相信模板根本不应该调用方法。
我知道这会很好,但我想知道在开源项目中做这样的事情是否会让其他开发人员鄙视我。
边注:
我来自 C#/.NET 背景,其中动态类型是最近引入的,除了一些利基领域(互操作性、IoC 框架、REST 客户端框架等)外,并未得到广泛应用。