当前位置:  开发笔记 > 编程语言 > 正文

Python不能在非持久属性上设置属性

如何解决《Python不能在非持久属性上设置属性》经验,为你挑选了1个好方法。

我想在模型上设置非持久属性。我尝试了以下方法:

class class User(models.Model):
    email = models.EmailField(max_length=254, unique=True, db_index=True)

    @property
    def client_id(self):
        return self.client_id

然后:

user = User.objects.create(email='123', client_id=123)
print(user.client_id)

我收到错误:无法设置attribute。为什么?



1> hlt..:

您还需要为属性定义一个setter函数,现在,它是只读的(例如,参见此问题)。

class class User(models.Model):
    email = models.EmailField(max_length=254, unique=True, db_index=True)

    @property
    def client_id(self):
        return self.internal_client_id

    @client_id.setter
    def client_id(self, value):
        self.internal_client_id = value

请注意,我将重命名self.client_idself.internal_client_id,因为否则,您将递归调用getter和setter函数-内部变量的名称必须与属性的名称不同。

当然,如果您需要使用self.client_id(例如,由于继承),则还可以重命名属性本身。


如果“ self._client_id”存在,它应该(不要忘记也更新设置器)
推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有