C++/Java语言中,private
关键字搭配getter和setter方法可以实现只读属性。Python没有private
关键字,那Python怎么设置属性只读呢?
有两种方法:1. 重写__setter__
方法; 2. 定义__变量并用@property修饰其getter方法。
1、 重写setattr方法
先来看看,当我们为属性赋值时,发生了什么:

可以看见,obj.var = val
是在__setattr__
这个特殊方法内实现的。那我们就可以在这个方法内部屏蔽只读属性。

请注意,这种方法会导致read_only属性不能被初始化,传值给构造函数也不行。
2、定义成__属性,搭配@property
属性的setter方法与属性同名

网友评论