关于python实例化对象直接添加属性
现在有一个fastapi Request类的实例request,动态添加了一个属性current_user,在另外一处代码中引用这个属性,但是pycharm提示该属性没有定义,但是运行没有问题。
问题来了,什么情况下可以动态添加属性,什么情况下不能那?
segmentfault上有一篇写的很好:
https://segmentfault.com/q/1010000004430528/a-1020000004464738#
要点:
Python 中自定义类的实例是可以动态添加属性的,但是内置的类的实例则不可以;
事实上,自定义的类若想禁止动态添加属性,则需借助 __slots__
属性,默认情况下,自定义类是没有该属性的;
另外,对于具有 __slots__
属性的类,该类和其实例都会缺失 __dict__
属性;
此外,__slot__
的值若为非空,则类的实例只能添加__slots__
值中定义的属性,而不能添加其他属性。