Python 基础第六天(面向对象)
类的三大特性:封装、继承、多态
封装:
广义的:给对象封装属性,给类中封装静态字段...
狭义的:私有制、私有成员
私有成员:静态私有字段,静态私有方法,静态私有对象属性。只有在自己类中访问,不能在类的外部或者派生类中访问。
继承:基类(父类)、派生类(子类)
多继承
新式类(python3中,默认)
经典类(python2中,可以是经典类,也可以是新式类(继承object))
深度优先、广度优先;前提:只能继承两个类,超过不遵循(算法不一样)
新式类:遵循广度优先 每个节点只走一次;一条路走到倒数第二级,判断,如果其他路可以走到终点,则返回走另一条路,如果不能,则走到终点
经典类:遵循深度优先 一条路走到底
通过 类.mro() 查看继承顺序
多态:python中无多态,处处阶多态。有多继承,其他语言有多态,只有单继承
抽象类(接口类):
from abc import ABCMeta,abstractmethod class Payment(metaclass=ABCMeta): # 抽象类(接口类) def __init__(self, money): self.money = money @abstractmethod # 抽象类(需要继承abcmata) 强制一个规范,凡是继承该类必须有pay方法,如果没有,实例化对象时则报错 def pay(self): pass # 制定一个规范 class Alipay(Payment): def pay(self): print(f"使用支付宝支付了{self.money}") class Jdpay(Payment): def pay(self): print(f"使用京东支付了{self.money}") class Wechat(Payment): # def py(self): # print(f"使用微信支付了{self.money}") def pay(self): print(f"使用微信支付了{self.money}") def pay(obj): # 归一化设计 obj.pay() a1 = Alipay(200) j1 = Jdpay(100) w1 = Wechat(300) # 当子类中没有pay()方法,对象实例化时报错
# 归一化设计
pay(a1)
pay(j1)
w1.pay()