zoukankan      html  css  js  c++  java
  • 组合、继承、多态

    一、组合

    1.定义:

    组合就是一个类的对象具备了某一个属性,该属性的值是指向另一个类的对象  

    2.为何需要用组合

    组合的存在是为了解决类与类之间代码的冗余的问题

    3.如何用组合

     1 class Course:   # 可以将所有的学生定义成一个学生类
     2     def __init__(self,name,period,price):
     3         self.name=name
     4         self.period=period
     5         self.price=price
     6     def info(self):
     7         msg='''
     8         课程名:%s
     9         价格:%s
    10         周期:%s
    11         '''%(self.name,self.period,self.price)
    12         print(msg)
    13 
    14 class School:
    15     def __init__(self,name):
    16         self.name=name
    17         
    18 class Teacher(School):  # 可以将所有的学生定义成一个学生类
    19     def __init__(self,name,salary):
    20         self.name=name
    21         super(Teacher, self).__init__(salary)
    22         self.salary=salary
    23     def tell(self):
    24         print('''
    25 
    26         ''')
    27 
    28 class Student(School):  # 可以将所有的学生定义成一个学生类
    29     def __init__(self,name,stu_id,):
    30         super(Student, self).__init__(name)
    31         self.stu_id=stu_id
    32 
    33 
    34 # 实例化(也可称为对象)
    35 sch=School('Shanghai')
    36 tea=Teacher('Dabao',12306)
    37 stu=Student('Xiaoming',10000)
    38 cos=Course('linux',6,10086)
    39 
    40 
    41 # 将学生、老师与课程对象相关联
    42 #  这样学生和老师就都可以取出和
    43 # 自己不相关联的类里边的属性了
    44 
    45 stu.corse=cos
    46 tea.course=cos
    47 
    48 # 学生、老师取出另外一个类中的属性
    49 stu.corse.info()
    50 tea.course.info()
    简单使用

    二、菱形继承

    1.定义

    当一个子进程继承了多个父类的时候,多个父类最终继承了同一个类,这种继承称之为菱形继承。

    2.菱形继承的问题

    在python2 和python3中,关于继承问题下的属性查找问题:

      python2:分成新式类与经典类,只有继承了object类的类才是新式类,没有继承object的类是经典类。

        新式类是按照广度优先的顺序查找属性的;经典类是按照深度优先查找属性的

      python3:只有新式类,如果没有写着继承object类则默认继承object类,是按照广度优先查找属性的。

    3.派生

      3.1 在子派生的新方法中重用父类的两种方式

     1 # 直接用类名、函数名
     2 
     3 class parent():
     4     def __init__(self,name,age):
     5         self.name=name
     6         self.age=age
     7         
     8 class Children(parent):
     9     def __init__(self,name,age,sex):
    10         parent.__init__(name,age)
    11         self.sex=sex
    指名道姓法
    class Parent():
        def __init__(self,name,age):
            self.naem=name
            self.age=age
    
    class Children(Parent):
        def __init__(self,name,age,sex):
            super(Children, self).__init__(name,age)
            self.sex=sex
    严格以继承属性查找关系
    super()会得到一个特殊的对象,该对象就是专门严格按照继承的关系访问父类中的属性
    super()可以不用为self传值
    注意点:
    super()的完整用法是super(自己的类名,self).__init__(属性1,属性2)
    在python2中需要写完整用法,但是在python3中可以不必写出完整用法
    super()的解释

    三、多态

    1.定义

      多态指的是同一种事物的多种状态。

    2.为何要用多态

      多态性:继承同一个类的多个子类中有相同的方法名

      这时,子类产生的对象就可以不用考虑具体的类型而直接调用该功能

    3.用法

     1 import abc
     2 
     3 class Animal(mataclass=abc.ABCMeta):
     4 # 父类不能被实例化,它是用来指定标准的
     5 
     6     @abc.abstractclassmethod
     7     def speak(self):
     8         pass
     9 
    10     @abc.abstractclassmethod
    11     def eat(self):
    12         pass
    13     
    14 class People(Animal):
    15     def speak(self):
    16         print("hi")
    17     def eat(self):
    18         pass
    19     
    20 class Dog(Animal):
    21     def speak(self):
    22         print("hehe")
    23     def eat(self):
    24         pass
    25     
    26 p1=People()
    27 d1=Dog()
    28 
    29 p1.speak()
    30 d1.speak()
    简单举例
  • 相关阅读:
    《学习之道》第六章习惯的部分-信号
    《学习之道》第六章习惯的组成
    《学习之道》第六章习惯的形成
    《学习之道》第五章小恶魔造成拖延(二)
    《学习之道》第五章拖延的两个小案例
    《学习之道》第五章是借口造成拖延(一)
    《学习之道》第五章认识拖延
    《学习之道》第五章认识“小恶魔”
    《学习之道》第五章分心与拖延
    redis 安装
  • 原文地址:https://www.cnblogs.com/Smart1san/p/9302095.html
Copyright © 2011-2022 走看看