类的三要素之一,继承
从父类继承,就可以直接拥有了父类的方法和属性,减少冗余,增加复用,同时子类也可以定义自己的属性和方法
继承: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__
如果搜索这些地方后没有找到就会抛异常,先找到就立即返回