zoukankan      html  css  js  c++  java
  • python学习-64 面向对象三大特性----继承1

                                                          面向对象三大特性

    1.三大特性?

    继承,多态,封装

    2.什么是继承?

    类的继承和现实生活中的父与子,继承关系是一样的,父类为基类。

    python中的类继承分为:单继承和多继承

    3.举例说明

    class Dad:
        money = 100
        def __init__(self,name):
            self.name =name
            print(name)
        def hit(self):
            print('%s 正在打孩子' %self.name)
    
    class Son(Dad):
        pass
    
    s1 = Son('abc')
    
    print(Son.money)
    s1.hit()

    运行结果:

    abc
    100
    abc 正在打孩子
    
    Process finished with exit code 0

    4.什么时候用继承?

    ----当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好。

    ----当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好。

    class Animals:
        def eat(self,name):
            print('%s 正在吃'%self.name)
        def drink(self,name):
            print('%s 正在喝'%self.name)
    class Cat(Animals):
        def __init__(self,name):
            self.name = name
    
    class Dog(Animals):
        def __init__(self,name):
            self.name = name
    
    c1 = Cat('xiaobai')
    c1.eat(Animals)
    c1.drink(Animals)
    
    d1 = Dog('xiaohei')
    d1.drink(Animals)
    d1.eat(Animals)

    运行结果:

    xiaobai 正在吃
    xiaobai 正在喝
    xiaohei 正在喝
    xiaohei 正在吃
    
    Process finished with exit code 0

    5.接口继承与归一化设计

    父类当中规定好了,子类的方法,但是不去实现。只要子类继承了父类,需要自己再去实现自己的方法。

    举例:(一切皆文件)

    import abc
    class Test(metaclass=abc.ABCMeta):    # 加上一个限制,只是为了规范子类
        @abc.abstractclassmethod        # 必须有以下函数,不然无法实例化
        def read(self):
            pass
        @abc.abstractclassmethod        # 必须有以下函数,不然无法实例化
        def write(self):
            pass
    
    
    class Disk(Test):
        def read(self):
            print('this disk read')
        def write(self):
            print('this is disk write')
    
    class CD(Test):
        def read(self):
            print('this cd read')
        def write(self):
            print('this is cd write')
    
    class Mem(Test):
        def read(self):
            print('this is mem read')
        def write(self):
            print('this is mem write')
            
    d1 = Disk()
    d1.read()
    d1.write()
    
    c1 = CD()
    c1.read()
    c1.write()
    
    m1 = Mem()
    m1.read()
    m1.write()

    运行结果:

    this disk read
    this is disk write
    this cd read
    this is cd write
    this is mem read
    this is mem write
    
    Process finished with exit code 0

    6.继承顺序

    ---- python的类可以继承多个类,Java和C#中则只能继承一个类

    ----python的类如果继承多个类,那么其寻找方法的方式有两种,一是深度优先,二是广度优先

    ~~~~子类会先于父类被检查

    ~~~~多个父类会根据它们在列表中的顺序被检查

    ~~~~如果对下一个类存在两个合法的选择,选择第一个父类

  • 相关阅读:
    attr系列保留方法使用
    利用python的标准库hashlib 的md5()生成唯一的id
    【病因】 神经衰弱的几大病因
    群里看到的一个骗子批八字的例子
    i'll make a man out of you
    It's A Good Day To Die
    两天了。照着SVN的界面画的一个界面。
    起一卦,看看我想要的,依然这么倒霉
    倒霉倒霉真倒霉,这一卦起得和上一卦一样
    只要是倒霉,起卦就能看出来
  • 原文地址:https://www.cnblogs.com/liujinjing521/p/11765751.html
Copyright © 2011-2022 走看看