对付一样平常的属性访问或者设置我们用属性操作符就行了,那getter与setter有什么优点呢?优点便是灵巧性高,由于当你访问或者设置某个属性时能实行一段代码,进而可以增加其它业务逻辑。
python中的getter与setter是通过property类来实现的,但实际利用中我们常用装饰器来实现,即@property和 @x.setter。
为了大略解释问题,我们实现以下例子:当访问或者设置某个属性时打印出正在访问或者设置的属性名字,代码如下:

class HelloDemo: def __init__(self, hello=None): self._hello = hello @property def hello(self): print("get hello") return self._hello @hello.setter def hello(self, value): print(f"set hello to value: {value}") self._hello = valuedemo = HelloDemo(1) print(f"=====hello is: {demo.hello}=====")demo.hello = 2print(f"=====hello is: {demo.hello}=====")
为了便于区分打印出的内容,我们加了=====和标识作为区分,运行以上代码输出如下:
get hello=====hello is: 1=====set hello to value: 2get hello=====hello is: 2=====
理解了上面的内容后,我们就可以通过这种办法实现一个只读属性,如下:
class HelloDemo: def __init__(self, hello=None): self._hello = hello @property def hello(self): return self._hello @hello.setter def hello(self, value): raise ValueError("can't set read only field")demo = HelloDemo(1) print(f"=====hello is: {demo.hello}=====")demo.hello = 2print(f"=====hello is: {demo.hello}=====")
上面代码由于修正hello属性,运行时就会抛出非常,如下:
=====hello is: 1=====Traceback (most recent call last): File "test.py", line 15, in <module> demo.hello = 2 File "test.py", line 11, in hello raise ValueError("can't set read only field")
这里我们只是解释了用法,详细的利用场景还是须要你去挖掘的,你学会了吗?如果有问题欢迎评论互换!