zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    PyQt5基础应用一
    常用SQL
    常用vim命令
    原生Ajax XMLHttpRequest对象
    跨域两种解决方案CORS以及JSONP
    Django生命周期 URL ----> CBV 源码解析-------------- 及rest_framework APIView 源码流程解析
    Django缓存机制--rest_framework中节流源码使用的就是django提供的缓存api
    Django2.0 models中的on_delete参数
    【开发工具IDE】Eclipse 安装 Maven 的 m2eclipse 插件
    【Java】CSVUtils
  • 原文地址:https://www.cnblogs.com/pathping/p/5237353.html
Copyright © 2011-2022 走看看