• 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()
  • 相关阅读:
    堆和栈的区别详解
    数组和指针背后——内存角度
    程序的运行时 数据结构
    连接MySQL数据库 ODBC DSN的配置
    SQL应该避免查询方式
    罗斯文(NORTHWIND )示例数据库和AdventureWorks示例数据库的安装
    敏捷个人:从中学到了什么?
    开发通用类 字符串加密、解密篇
    关于Session的灵活运用
    解决Ext.Combobox this.getRawValue() is undefined的错误
  • 原文地址:https://www.cnblogs.com/pathping/p/5237353.html
Copyright © 2020-2023  润新知