Ertitle: python 类的属性
文章目录
【注意】最后更新于 September 18, 2018,文中内容可能已过时,请谨慎使用。
1. 下划线问题
- 单下划线
_
开头, 约定的类内部*‘私有’* 属性, 也可能在类外部调用, 但尽量不调用 - 仅以双下划线
__
开头, 那么会在属性前加上下划线和类名, 也就是比如类class A
中有,__x
, 那么实际外部访问时为_A__x
. 由此可知, 当是类方法def __a(self)
那么这个方法不会被子类覆写, 因为覆写__a()
实际上是_A__a()
方法 - 双下划线
__
开头并以双下划线__
结束, 即__x__
这样, 这种变量不会隐性的在前面加上_类名
. 而是保持本来的变量名, 从__init__
的系统内置也可以看也, 这是不变的, 所以我们可以在子类覆写这些方法
2. 属性访问问题
- 如果已经在类
__slots__
,__dict__
中定义的变量属性, 访问的时候会直接从这些地方查找 - 向父类的
__dict__
查找 - 新式类会调用
__getattribute__
方法. 因为父类object
没有__getattr__
, 所以当我们覆盖__getattribute__
时, 看需要自己手动调用__getattr__
. 默认下没有覆盖__getattribute__
时, 如果覆盖了__getattr__
, 则会调用这个方法