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()
  • 相关阅读:
    同源策略和跨域知识点学习
    一次脚本注入广告漏洞分析
    一个利用微信分享的项目开发过程以及后续思考
    react-native —— 在Windows下搭建React Native Android开发环境
    ionic —— 开发环境搭建并编译运行第一个APP
    错误: 找不到或无法加载主类
    jekyll and github.io搭建博客遇到的问题
    java 10 生成头文件
    JNI的使用
    vivado error:incorrect freePtr. Call out of sequence?
  • 原文地址:https://www.cnblogs.com/pathping/p/5237353.html
Copyright © 2011-2022 走看看