zoukankan      html  css  js  c++  java
  • Python9-继承2-day25(大年初二)

    继承:什么是什么关系
    组合:什么有什么关系
    单继承
    先抽象再继承,几个类直接的相同代码抽象出来,成为父类
    子类自己没有的名字可以使用父类的方法和属性
    如果子类自己有,一定先用自己的
    在类中使用self的时候,一定要看清楚self指向谁
    多继承
    新式类和经典类:
    关于多继承寻找名字的顺序:新式类广度优先,经典类深度优先
    在新式类里,有个类名,mro方法,查看广度优先的继承顺序
    在python方法,有个super方法,根据广度优先的继承顺序查找上一个类
    from abc import abstractmethod,ABCMeta
    class Payment(metaclass=ABCMeta):  #元类  默认的元类  type
        @abstractmethod
        def pay(self,money):
            raise NotImplemented   #没有实现这个方法
    
    # 规范:接口类或者抽象类都可以
    #接口类 默认支持多继承,接口类中的所有的方法都必须不能实现——java
    #抽象类  不支持多继承,抽象类中的方法可以实现一些代码的实现——java
    
    
    class Wechat(Payment):
        def pay(self,money):
            print('已经使用微信支付了%s元'%money)
    
    class Alipay(Payment):
        def pay(self,money):
            print('已经使用支付宝支付了%s元'%money)
    
    class Applepay(Payment):
        def fuqian(self,money):
            print('已经使用applepay支付了%s元'%money)
    
    def pay(pay_obj,money):    #统一支付入口
        pay_obj.pay(money)
    # wechat = Wechat()
    # wechat.pay(100)
    # ali = Alipay()
    app = Applepay()
    # ali.pay(200)
    # pay(wechat,200)
    # pay(ali,200)
    # pay(app,300)

    接口类的多继承

    from abc import abstractmethod,ABCMeta
    class Swim_Animal(metaclass=ABCMeta):
        @abstractmethod
        def swim(self):
            pass
        @abstractmethod
        def func1(self):
            pass
    class Walk_Animal(metaclass=ABCMeta):
        @abstractmethod
        def walk(self):
            pass
    class Fly_Animal(metaclass=ABCMeta):
        @abstractmethod
        def fly(self):
            pass
    class Animal:
        def walk(self):
            pass
        def  swim(self):
            pass
        def fly(self):
            pass
    class Oldying(Fly_Animal,Walk_Animal):
        pass
    class Tiger(Walk_Animal,Swim_Animal):
        pass
    class Swan(Walk_Animal,Fly_Animal,Swim_Animal):
        pass
    广义上面向对象的封装:代码的保护,面向对象的思想本身就是一种封装
    只让自己的对象能调用自己类中的方法

    狭义上的封装——面对对象的三大特性之一
    属性和方法都藏起来 不让你看见
    class Person():
        __key = 123    #私有静态属性
        def __init__(self,name,password):
            self.name = name
            self.__passwd = password   #私有属性
        def __get_pwd(self):    #私有方法
            print(self.__dict__)   #只要在类的内部使用私有属性,就会自动带上_类名
            return self.__passwd
        def login(self):
            self.__get_pwd()
    #所有的私有,都是在变量的左边加上双下划线
        #对象的私有属性
        #类中私有方法
        #类中的静态属性
    #所有的私有的 都不能在类的外部使用,只能在类外部使用
    
    alex = Person('alex','alex3714')
    # print(alex.__passwd)
    print(alex._Person__passwd)    #_类名__属性名
    
    alex.__high = 1
    print(alex.get_pwd())
    print(alex.__high)
  • 相关阅读:
    Java 端口转发
    Tomcat笔记
    RocketMQ开启ACL后客户端连接报Algorithm HmacSHA1 not available的解决方式
    RSA签名与验签
    小米9升级MIUI11
    【转】linux awk命令详解
    进程和线程
    Jenkins笔记
    【转】Jenkins启动、停止脚本
    UiAutomator源码分析
  • 原文地址:https://www.cnblogs.com/zhangtengccie/p/10353292.html
Copyright © 2011-2022 走看看