类的继承

类的继承

基本概念

面向对象三要素之一,继承Inheritance

继承(也叫派生)

class Cat(Animal)这种形式就是从父类继承,括号中写上继承的类的列表.

阶乘可以让字类从父类获取特征(属性和方法)

父类

Animal就是Cat的父类,也称基类,超类.

子类

Cat就是Animal的字类,也称派生类

定义

class 子类名(基类1[,基类2,...]):
    语句块

如果类定义时,没有基类列表,等同于继承子object.在Python3中,object类时所有对象的根基类.

class A:
    pass
#等价于
class A(object):
    pass
查看属性的方法
属性方法 含义
__bases__ 查看返回类的基类的元组.是类的方法,不会返回爷爷类
mro()方法 显示方法查找顺序,调用__mro__,返回查找顺序列表,是类的方法,实例不能用
__subclasses__() 类的子类列表

总结

继承时,公有的,子类和实例都可以随意访问;私有成员被隐藏,子类和实例不可直接访问,当私有变量所在的类内的方法中可以访问这个私有变量.

Python通过自己的一套实现,实现和其他语言一样的面向对象的继承机制.

属性查找顺序

实例的__dict__-->类__dict__-->(如果有继承)父类__dict__

这些地方都搜索没找到就会抛异常,先找到就立即返回.

方法的重写,覆盖(override)

同名方法或属性在调用过程中,类似函数执行,前面的属性会被后面的同名属性覆盖.

静态方法和类方法

@staticmethod静态方法

@classmethod类方法

这些方法都可以覆盖,原理相同,属性字典的搜索顺序

继承中的初始化

super()方法

super()可以访问到父类的属性

子类继承父类的时候,最好加上super().__init__()

作为一个好习惯,如果父类定义了__init__方法,就应该在子类的__init__中调用它

一个原则:自己的私有属性,就该自己的方法读取和修改,不要借助其他类的方法,即使时父类或者派生类的方法.

两个方法

isinstance(o,c) 判断o对象是不是c类或(c类的父类,祖父类,,,)的实例

issubclass(o,c) 判断o类是不是c类或者(c类的父类,祖父类,,,的子类

原文地址:https://www.cnblogs.com/agsol/p/11647842.html