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()
# 父类对象,只能使用自身方法,不能使用子类方法.

多继承

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

同名方法的解析顺序(MRO, Method Resolution Order):

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

A

/ \

/   \

B     C

\   /

\ /

D

定义

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

2.说明:

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

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

例如:公司组织架构

老板

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

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

优点

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

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

缺点:耦合度高

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

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

相关概念

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

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

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

多继承:父类有多个(例如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.增强程序扩展性,体现开闭原则。

重写:

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

原文地址:https://www.cnblogs.com/maplethefox/p/10887853.html

时间: 2024-08-29 17:25:40

Python面向对象(四)—继承、多态的相关文章

python面向对象之继承/多态/封装

老师说,按继承/多态/封装这个顺序来讲. 子类使用父类的方法: #!/usr/bin/env python # coding:utf-8 class Vehicle: def __init__(self,name,speed,load,power): self.name = name self.speed = speed self.load = load self.power = power def run(self): print("开动啦.") class Benz(Vehicle

python 面向对象四 继承和多态

一.继承 1 class Animal(object): 2 def run(self): 3 print('Animal is running...') 4 5 class Dog(Animal): 6 7 def run(self): 8 print('Dog is running...') 9 10 def eat(self): 11 print('Eating meat...') 12 13 dog = Dog() 14 dog.run() 1 Dog is running... 当子类

php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一系列个体的集合,类是一个抽象的概念2.什么是对象?从类中拿到的具有具体属性值得个体,称为对象,对象是一个具体的个体 所以,面向对象即我们专注对象来处理问题,通过从一个个具有属性和功能的类中拿到对象来处理问题. 下面我们再来细说下面向对象的三大特征:继承/封装/多态 一.继承 在PHP中我们主要通关E

Python 面向对象特性二 多态(3-7)

接口类: 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能 在Python中是没有接口的概念的(接口是在Java里的) from abc import ABCMeta,abstractmethod#调用abc模块中的抽象方法 # 接口类 : 接口类就是一个规范 接口类一般是项目设计人员写好的 class Pa

Python面向对象特性 - 继承

面向对象有3大特性:继承.多态.封装,本章介绍 Python中的 继承 特性~? 什么是继承 继承是创建类的一种方式,在 Python中支持多继承,即在创建类的时候可以继承一个或者多个父类.在继承关系中,被继承的类通常称为父类(或超类,基类),新建的类则称为子类(或派生类).?继承的优势在于可以有效地重用代码,提高代码的可读性~?继承示例: class Fu_1: # 父类 pass class Fu_2: # 父类 pass class Zi_1(Fu_1): # 单继承 pass class

python面向对象之继承与派生

一.继承 继承是一种创建新的类的方式,在python中,新建的类可以继承自一个或者多个父类,原始类称为基类或超类,新建的类称为派生类或子类. python中类的继承分为:单继承和多继承,如果是多继承的话,继承顺序有深度和广度2种 示例: class ParentClass1: #定义父类 pass class ParentClass2: #定义父类 pass class SubClass1(ParentClass1): #单继承,基类是ParentClass1,派生类是SubClass pass

十七、Python面向对象之继承

在面向对象,继承是一个很重要的特性 子类与父类,子类是对父类的一种扩展,在父类的属性和方法上进行一些扩展 示例:没带继承 #定义一个带编号和状态的门的类 class Door(object): def __init__(self,num,status): self.num = num self.status = status def open(self): self.status = 'open' def close(self): self.status = 'close' #定义一个可以锁的门

Python 面向对象编程——继承和多态

1.1   继承和多态 1.1.1   继承 当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Super class). >>> class Animal(object): ...    def run(self): ...        print('Animal is running...') #父类 ... >>> class Dog(Ani

Python面向对象、继承和多态

面向对象变成的基本思想:类和实例 类用于定义抽象类型---------------------人-----------------------------class  Person(object):------------------数据封装class Person(object): pass                                                                 def __init__(self,name): self.name = n

oldboy 21th day. I love Python. 面向对象之封装, 多态, 继承 三大特性

一, 主要内容: 接口类:( 只是在工作中, 书写的一种规范.) 抽象类: 用处: 在工作中, 如果你要是规定几个类, 必须有一样的方法, 你要是抽象类. 封装: 1, 将一些属性或者方法 (一些有用的信息) 放置在一个空间中. 2, 私有成员的封装:私有静态变量, 私有属性, 私有方法 特点: 在变量前+__双下划线, 并且在类外面,子类访问私有变量,私有方法 是访问不到的. 因为私有成员,在运行时, 都会变成: _类名__变量名 所以你在类的外部,或者派生类中都不可访问. 有些方法, 变量,