关于python实例化对象直接添加属性

现在有一个fastapi Request类的实例request,动态添加了一个属性current_user,在另外一处代码中引用这个属性,但是pycharm提示该属性没有定义,但是运行没有问题。

问题来了,什么情况下可以动态添加属性,什么情况下不能那?

segmentfault上有一篇写的很好:

https://segmentfault.com/q/1010000004430528/a-1020000004464738#

要点:

Python 中自定义类的实例是可以动态添加属性的,但是内置的类的实例则不可以;

事实上,自定义的类若想禁止动态添加属性,则需借助 __slots__ 属性,默认情况下,自定义类是没有该属性的;

另外,对于具有 __slots__ 属性的类,该类和其实例都会缺失 __dict__ 属性;

此外,__slot__的值若为非空,则类的实例只能添加__slots__值中定义的属性,而不能添加其他属性。

 

posted @ 2021-02-05 11:41  LeoGIS  阅读(531)  评论(0)    收藏  举报