Python面向对象(四)—继承、多态

继承

语法

1.代码:

class 子类(父类):

  def __init__(self,参数列表):

super().__init__(参数列表)

self.自身实例变量 = 参数

设计角度: 先有子类,再有父类. 抽象化的过程:子(具体,小概念) -> 父(抽象,大概念)

编码角度: 先写父类,再写子类.

2.说明:

-- 子类拥有父类的所有成员。

-- 子类如果没有构造函数,将自动执行父类的,但如果有构造函数将覆盖父类的。此时必须通过super()函数调用父类的构造函数,以确保父类属性被正常创建。

class Person:
  def __init__(self, name):
    self.name = name
  def say(self):
    print("会说话")

class Student(Person):
  # 如果子类具有构造函数,则没有父类的构造函数.
  def __init__(self, name, score):
    self.score = score
    # 通过super()函数调用父类方法
    super().__init__(name)
  def study(self):
    print("会学习")

class Teacher(Person):
  def __index__(self,name):
    super().__init__(name)
  def teach(self):
    print("会讲课")


s01 = Student("无忌", 100)
print(s01.name)
print(s01.score)
s01.say()
s01.study()
# 子类对象,直接使用父类方法.(继承语法的体现)

p01 = Person("无忌")
print(p01.name)
# 如果子类没有构造函数,则使用父类的.
p01.say()
# 父类对象,只能使用自身方法,不能使用子类方法.

多继承

一个子类继承两个或两个以上的基类,父类中的属性和方法同时被子类继承下来。

同名方法的解析顺序(MROMethod Resolution Order:

类自身 --> 父类继承列表(由左至右)--> 再上层父类

      A

      / \

     /   \

    B     C

     \   /

      \ /

       D

定义

1.重用现有类的功能与概念,并在此基础上进行扩展。

2.说明:

-- 子类直接具有父类的成员(共性),还可以扩展新功能。

-- 事物具有一定的层次、渊源,继承可以统一概念。

例如:公司组织架构

       老板

行政中心         营销中心           技术中心

人力资源  行政部   销售部  策划部   研发部  产品部

优点

1.一种代码复用的方式。

2.以层次化的方式管理类

缺点:耦合度高

作用:隔离客户端代码与功能的实现方式。(抽象(代表)变化点,隔离用与做.)

适用性:多个类在概念上是一致的,且需要进行统一的处理。

相关概念

父类(基类、超类)、子类(派生类)。

父类相对于子类更抽象,范围更宽泛;子类相对于父类更具体,范围更狭小。

单继承:父类只有一个(例如 JavaC#)。

多继承:父类有多个(例如C++Python)。

Object类:任何类都直接或间接继承自 object 类。

内置函数

isinstance(obj, class_or_tuple)

返回这个对象obj 是否是某个类的对象,或者某些类中的一个类的对象。

# 判断对象是否属于一个类型
print(isinstance(s01, Person))  # true
print(isinstance(s01, Teacher))  # false
print(isinstance(s01, (Person, Teacher)))  # true
print(isinstance(s01, Student))  # true

# 判断一个类型是否属于另一个类型
print(issubclass(Teacher, Person))  # true
print(issubclass(Teacher, Student))  # false
print(issubclass(Person, Student))  # false
print(issubclass(Person, Person))  # true
# 如果判断父子
print(issubclass(Teacher, Person) and Teacher != Person)  # true
print(issubclass(Teacher, Teacher) and Teacher != Teacher)  # false

多态

定义:

父类的同一种动作或者行为,在不同的子类上有不同的实现(调用父类,执行子类.)

作用:

1.继承相关概念的共性进行抽象,多态在共性的基础上,体现类型的个性化(一个行为有不同的实现)。

2.增强程序扩展性,体现开闭原则。

重写:

子类实现了父类中相同的方法(方法名、参数),在调用该方法时,实际调用的是子类的方法。(变化点重写。)

posted @ 2019-05-19 00:34  maplethefox  阅读(440)  评论(0编辑  收藏  举报