上周内容回顾
初始面向对象
class 类名(父类1,父类2):
静态属性 = "" # 静态属性,类方法
def __init__(self): # 初始化方法 def func(self): pass # 动态属性,方法
对象.类名 # 实例化,找init里面要对应
对象.方法名()
对象.属性名
组合 什么有什么,一个类的属性是另一个类的对象 # *****
class Course:
def __init__(self,name,price,period):
self.name = name
self.price = price
self.period =period
python = Course("python",19800,"6 mouths")
class Classes:
def __init__(self,name,course):
self.name = name
self.course = course
pys9 = Classes("python_s9",python)
print(pys9.course.name)
命名空间,类和对象分别存在不同的明明看空间,类永远不能调用对象,对象可以在找不到自己空间内的名字的时候去找类的
面向对象的三大特性,继承多态封装
单继承 # ****
父类(超类,基类)
子类(派生类):派生方法,派生属性
子类的对象调用的时候先调自己,自己没有才用父类
多继承 (面试) # *** 一般来说不会超过三个父类,不要超过三层
子类自己用就用自己的,如果没有就用离子类最近的那个父类的里面的方法
抽象类,接口类 # ** ,不是很重要主要是作为java对比 # ***** 面试必考
经典类,深度优先
新式类,广度优先
super 只能在python3中使用,根据mro广度优先顺序找上个类,并非单纯的找父类 # ****
多态 # *** 面试的时候会被问到,主要记忆鸭子类型以及和java的对照区别
鸭子类型,两个类里面有同名方法,比如list 和touple里面很多的方法但是也不需要非要划分在一个父类里面
封装
私有 __名字 ,在内的内部调用,外部是无法调用的 # **
属性
方法
静态方法
三个装饰器:
@property **** 规范,面试 @name.setter
@staticmethod *** 非要吧一个函数改成面向对象用的
@classmethod ***** 当一个方法只使用了类的静态变量时,就给这个方法加这个,默认传cls参数
使用场景比如修改私有的静态属性方法