pytho类继承与访问控制

类的三要素之一,继承
 
从父类继承,就可以直接拥有了父类的方法和属性,减少冗余,增加复用,同时子类也可以定义自己的属性和方法
继承:class ****(需要继承的类)
这样就可以让其子类获得父类的方法与属性
 
父类:
也称为超类,和基类
 
子类:
也称为派生类
 
具体定义如下:
class 子类名(基类1,*,*,*):
       语句块
 
如果类定义中,没有基类列表,等同于继承自object,,在python3中,object是所有对象的基类
 
python支持多继承,继承也可以多级
 
特殊属性和方法
__base__ 类的基类
__bases__显示当前继承的类
__mro__显示当前继承链
mro() 同上                         调用方法 ini.mro( )
__subclasses__( ) 类的子类列表          调用方法   ini.__subclasses__( )
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
类的属性构造 :
 
继承后的子类中若含有初始化函数__init__,就会覆盖父类的__init__的数据;
但是可以调用父类的 __init__来执行父类init的方法,他们的调用顺序不同,最后的结果也不同
 
私有的不可被覆盖
子类中如果有同名方法或者函数,就会覆盖父类的同名方法或者函数,但是私有属性不会被覆盖,哪个类的私有属性,就会被那个类的实例给加到字典中,不同字典的私有属性,加在实例中的数据名字也不一样
 
总结:
双下划线的会被保存到实例的属性中,可以使用property和方法,来让用户拿到这个私有属性
 
 
从父类继承,自己没有的,就可以到父类中找
私有的都是不可以访问的,但是本质上依然是改了名称放在这个属性所在类的__dict__,知道这个新名称就可以直接找到这个隐藏的变量,这是一个慎用的方法
 
继承时,共有的,子类和实例都可以随意访问;私有成员被隐藏,子类和实例不可直接访问,当私有变量所在的类内的方法中可以访问这个私有变量,(property,定义一个函数返回给self)
 
属性查找顺序,实例的__dict__ -->类 __dict__ 有继承-->父类__dict__
如果搜索这些地方后没有找到就会抛异常,先找到就立即返回
 
原文地址:https://www.cnblogs.com/spidermansam/p/7822236.html