属性的访问控制
之前也有讲到过,Python 没有真正意义上的私有属性。然后这就导致了对 Python 类的封装性比较差。我们有时候会希望 Python 能够定义私有属性,然后提供公共可访问的 get 方法和 set 方法。Python 其实可以通过魔术方法来实现封装。
方法
说明
__getattr__(self, name)
该方法定义了你试图访问一个不存在的属性时的行为。因此,重载该方法可以实现捕获错误拼写然后进行重定向, 或者对一些废弃的属性进行警告。
__setattr__(self, name, value)
定义了对属性进行赋值和修改操作时的行为。不管对象的某个属性是否存在,都允许为该属性进行赋值.有一点需要注意,实现 __setattr__
时要避免"无限递归"的错误,
__delattr__(self, name)
__delattr__
与 __setattr__
很像,只是它定义的是你删除属性时的行为。实现 __delattr__
是同时要避免"无限递归"的错误
__getattribute__(self, name)
__getattribute__
定义了你的属性被访问时的行为,相比较,__getattr__
只有该属性不存在时才会起作用。因此,在支持 __getattribute__
的 Python 版本,调用__getattr__
前必定会调用 __getattribute__``__getattribute__
同样要避免"无限递归"的错误。
通过上面的方法表可以知道,在进行属性访问控制定义的时候你可能会很容易的引起一个错误,可以看看下面的示例:
上面方法的调用具体示例如下:
输出的结果:
Last updated