继承, 封装,多态,反射和魔法方法

什么是继承

继承指的是新建类的方法,新建的类称之为子类或派生类,子类继承的类叫做父类,也称之为基类或超类;

什么是抽象

抽象是抽取相似的部分,称之为抽象

什么是派生

子类继承父类的属性,并且派生出新的属性

继承和派生的特点

继承的特征: 子类可以继承父类的属性,并且可以派生自己的属性

什么是重用

子类可以重用父类的方法,通过:

  • 直接通过,父类.attr调用,需要传入对象(self)和需要的参数
  • 通过super().atrr调用,不用传入对象形参(self)

继承的目的

减少代码冗余

对象,类和继承的关系

对象是特征与技能的结合体, 类是一系列对象相同的特征与技能的结合体,继承是一些列类相同的特征与技能的结合体

继承背景下对象属性查找顺序

  1. 优先从对象自己的名称空间中查找
  2. 若对象没有,则会从类中查找
  3. 类若没有,则从类的父类中查找
    若是多继承情况:
    经典类: 深度优先, 新式类:广度优先

什么是经典类和新式类

  • 继承object的类是新式类
  • python3中, 默认继承object类
  • python2中,凡是没有继承object的类都是经典类

什么是组合

一个对象包含另外一些对象作为其属性

组合与继承对比

都可以避免代码冗余,组合可以解耦合

封装

什么是封装

把一堆属性封装到一个对象中,利用了组合的思想

为什么要封装

方便存取,并可控制属性的获取(利用接口)

python对象的访问限制机制

什么是访问限制机制

在定义类时,以__开头的属性,会被隐藏起来(利用改名为_Class_attr的方法), 让外部不能直接访问,但不是强制性的,可以利用(_Class_attr)的名字访问

目的

限制对内部重要数据获取,提供一个接口来对外提供数据

property

什么是property

内部装饰器,使得内部方法的调用看起来像属性的获取

多态

什么是多态

不同对象相同的属性名有不同的属性值,表现为不同的属性形态

多态性目的

不同对象,在使用相同功能的情况下,调用同一个名字

多态的实现:

-继承抽象类,
-鸭子类型

抽象类

什么是抽象类

使用abc模块的abstractmethod装饰方法的类

目的

强制子类必须遵循父类的标准,(必须要定义某些方法)

如何使用

class test(metaclass=abc.ABCMeta):
@abstractmethod
def func(self):
....

鸭子类型

不管对象是何种类型,当在某些属性调用接口满足能被调用的类型时,那就是鸭子类型 。
在python中,不推荐使用抽象类强制限制子类的定义,但是推荐都遵循鸭子类型。

继承:耦合性高,
鸭子类型: 耦合度低

反射

通过字符串对对象或类的属性进行操作

hasattr
getattr
setattr
delattr

魔法方法

__init__ # 调用类时触发
__str__ # 打印对象时触发
__del__ # 对象被销毁时触发
__getattr__ # 查找属性时,属性没有时触发
__setattr__ # 设置对象属性时触发 
__call__ # 对象被调用时触发
__new__ # 会在__init__前执行
原文地址:https://www.cnblogs.com/YajunRan/p/11650362.html