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)
  • 相关阅读:
    ios 数据类型转换 UIImage转换为NSData NSData转换为NSString
    iOS UI 12 block传值
    iOS UI 11 单例
    iOS UI 08 uitableview 自定义cell
    iOS UI 07 uitableviewi3
    iOS UI 07 uitableviewi2
    iOS UI 07 uitableview
    iOS UI 05 传值
    iOS UI 04 轨道和动画
    iOS UI 03 事件和手势
  • 原文地址:https://www.cnblogs.com/zhangtengccie/p/10353292.html
Copyright © 2011-2022 走看看