回顾
属性的存放位置:
类中应该存储所有对象公共的内容
对象中存储都是每个对象独有的(都不同)
初始化函数:__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__)