python - 在对象的 __class__ 属性上设置属性

标签 python django

我对设置对象的属性和在对象的 __class__ 属性上设置属性之间的区别感到有点困惑。粗略地说,obj.attrobj.__class__.attr。它们有什么区别?

前者是在一个实例上设置一个属性,而后者是在一个实例的类上设置一个属性(使该属性对所有实例可用)?如果是这种情况,那么这些新的类属性如何在 Django 请求中可用,因为该框架使用多线程?设置类变量是否使其在请求之间保持不变?

最佳答案

是的,就是在类上设置属性。但不,这不一定会使它在请求之间可用,尽管它可能会。

您的问题表明您对 Django 请求的工作方式存在误解。 Django 不一定使用多线程服务:事实上,在大多数服务器配置中,它由多个独立的进程托管,这些进程由服务器管理。同样,根据配置,这些进程中的每一个可能有也可能没有多个线程。但是无论是否涉及线程,进程始终由服务器启动和终止。

如果您在一个请求期间在 Django 中的一个类或模块上设置了一个属性,则由同一进程提供的任何后续请求都将看到该属性。但是无法保证您的下一个请求将由哪个进程提供服务。而且肯定没有办法知道同一用户是否会访问同一进程的下一个请求。

在类或模块级别设置东西可能是一些非常讨厌的线程安全错误的来源。我的建议是一般不要这样做。如果您需要跨请求保存内容,请将其存储在数据库、缓存或(尤其是特定于特定用户的情况下) session 中。

关于python - 在对象的 __class__ 属性上设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22169372/

相关文章:

Python:随机系统时间种子

javascript - Ajax Form 和 Django 集成发布错误

python - 如何使用Python在Django for Windows中激活虚拟环境?

javascript - 附加值为 bool 值 false 的 FormData 字段会导致该函数失败。

Django和crispy form,如何在crispy Layout中添加id和name

python - numpy.core._exceptions.UFuncTypeError : ufunc 'subtract' did not contain a loop with signature matching types

python - python 3中导入函数的范围是什么

python - 使用 PyQt4 通过 Python 进行简单对话框(问题、确定、取消)

python - Django:在 settings.py 中获取远程 IP 地址

Python在点击时获取鼠标x,y位置