day25 继承的另一种使用方式、接口、接口类与抽象类的对比、鸭子类型

回顾

属性的存放位置:
        类中应该存储所有对象公共的内容
        对象中存储都是每个对象独有的(都不同)
初始化函数:__init__
        给对象的属性赋初值 , 可以保证只要对象被创建就一定有相应的属性
       节省重复代码( 指初始化函数init给每个对象都会初始一份相应的属性)

绑定方法指的是 :将类或对象与函数进行了绑定
        之所以绑定是为了提高整合度,后续在拿到对象就可以直接调用对象相关的所有属性,而无需关心数据是什么 如何处理
        类、对象其实都可以看作是一个存储数据的容器(有属性有方法)

对象绑定方法:

         默认就是绑定给对象的
         当使用对象调用时 会自动传入对象本身作为第一个参数,执行该方法时,直接问self对应的这个对象要数据就可以了
         用类来调用时就是一个普通函数 该怎么传就这么传
类绑定方法
         当执行该方法时,需要访问类中的内容而不需要对象中的内容时用类绑定方法
          @classmethod
         无论使用类还是对象来调用都会自动传入类本身作为第一个参数
非绑定方法
          既不需要访问类中的内容 也不需要访问对象中的内容 那就作为非绑定方法 就是一个普通函数 没有自动传值的效果
         @staticmethod

继承:说的是类与类之间的关系:子类继承父类【什么是什么的关系 如:猫是动物,猫继承了动物类】
         存在基础关系后 子类可以直接使用父类已经存在的内容 ,针对父类中的代码提高了它的复用性

属性查找顺序
         对象本身 -> 所在的类 -> 类的父类 -> .... object

抽象类  指的是 把一系列类中的相同的特征和行为抽取 形成一个新的类 (公共父类)
          使用继承时 应该先抽象 再继承

派生:  某子类拥有与父类不同的内容

覆盖:子类出现了与父类完全相同的名字

一切皆对象:在py3里面所有数据全是对象 包括 int list 模块 函数 .....包等等....

子类访问父类的内容:两种方式:
       1.指名道姓 直接用类名 即使不存在继承关系也能调用
       2.super().要访问的属性 (py3出现的)
       3.super(这个子类的名字,self).属性

今日内容

继承的另一种使用方式:继承已有的类,在子类中扩展新功能,例:创建一个list的子类,给append的方法增加存储元素的类型

class MyList(list):
def __init__(self,element_cls):
# 当你覆盖了init方法时
# 不要忘记调用super().init函数让父类完成原有的初始化操作
super().__init__()
self.element_cls = element_cls


def append(self, object):
# if isinstance(object,str) # 判断要存储的元素是否是指定类型
if object.__class__ == self.element_cls:
super().append(object)
else:
print("只能存储%s类型!" % self.element_cls.__name__)

猜你喜欢

转载自www.cnblogs.com/qingqinxu/p/10884027.html