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()

 

posted @ 2016-03-03 09:35  pathping  阅读(124)  评论(0编辑  收藏  举报