Python定义只读属性

C++/Java语言中,private关键字搭配getter和setter方法可以实现只读属性。Python没有private关键字,那Python怎么设置属性只读呢?
有两种方法:1. 重写__setter__方法; 2. 定义__变量并用@property修饰其getter方法。

1、 重写setattr方法

先来看看,当我们为属性赋值时,发生了什么:


Python定义只读属性_第1张图片
Snip20181020_6.png

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

Python定义只读属性_第2张图片
Snip20181020_7.png

请注意,这种方法会导致read_only属性不能被初始化,传值给构造函数也不行。

2、定义成__属性,搭配@property

属性的setter方法与属性同名


Python定义只读属性_第3张图片
Snip20181020_8.png

你可能感兴趣的:(Python定义只读属性)