python中如何进行类的派生与继承_python 面向对象之继承与派生

本文介绍了Python中的类继承与派生,包括单继承、多继承、经典类与新式类的区别,以及继承与代码重用的关系。通过实例展示了如何使用继承来减少代码重复,并探讨了继承的实现原理、继承顺序。此外,还讨论了组合与继承的差异,以及在子类中调用父类方法的两种方式。文章最后提到了接口与归一化设计的重要性,并展示了如何在Python中通过抽象类实现接口的模拟。
摘要由CSDN通过智能技术生成

一:初识继承

1,什么是继承?

继承指的是类与类之间的关系,是一种什么“是”什么的关系,继承的功能之一就是用来解决代码重用问题

继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可以成为基类或超类,新建的类称为派生类或子类

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

class ParentClass1: #定义父类

pass

class ParentClass2: #定义父类

pass

class SubClass1(ParentClass1): #单继承,基类是ParentClass1,派生类是SubClass

pass

class SubClass2(ParentClass1,ParentClass2): #python支持多继承,用逗号分隔开多个继承的类

pass

查看继承

方法:

__bases__则是查看所有继承的父类

实例:

>>> SubClass1.__bases__ #__base__只查看从左到右继承的第一个子类,__bases__则是查看所有继承的父类

(,)

>>> SubClass2.__bases__

(, )

经典类与新式类

1.只有在python2中才分新式类和经典类,python3中统一都是新式类

2.在python2中,没有显式的继承object类的类,以及该类的子类,都是经典类

3.在python2中,显式地声明继承object的类,以及该类的子类,都是新式类

4.在python3中,无论是否继承object,都默认继承object,即python3中所有类均为新式类

提示:如果没有指定基类,python的类会默认继承object类,object是所有python类的基类,它提供了一些常见方法(如__str__)的实现。

>>> ParentClass1.__bases__

(,)

>>> ParentClass2.__bases__

(,)

二:继承与抽象(先抽象再继承)

继承描述的是子类与父类之间的关系,是一种什么是什么的关系,要找出这种关系,必须先抽象再继承。抽象即抽取类似或者说比较像的部分。

抽象分成两个层次:

1.将奥巴马和梅西这俩对象比较像的部分抽取成类;

2.将人,猪,狗这三个类比较像的部分抽取成父类。

抽象最主要的作用是划分类别(可以隔离关注点,降低复杂度)

继承:是基于抽象的结果,通过编程语言去实现它,肯定是先经历抽象这个过程,才能通过继承的方式去表达出抽象的结构。

抽象只是分析和设计的过程中,一个动作或者说一种技巧,通过抽象可以得到类

三:继承与重用性

首先举一个例子,使用继承来重用代码比较好的例子

==========================第一部分

例如

猫可以:喵喵叫、吃、喝、拉、撒

狗可以:汪汪叫、吃、喝、拉、撒

如果我们要分别为猫和狗创建一个类,那么就需要为 猫 和 狗 实现他们所有的功能,伪代码如下:

#猫和狗有大量相同的内容

class 猫:

def 喵喵叫(self):

print '喵喵叫'

def 吃(self):

# do something

def 喝(self):

# do something

def 拉(self):

# do something

def 撒(self):

# do something

class 狗:

def 汪汪叫(self):

print '喵喵叫'

def 吃(self):

# do something

def 喝(self):

# do something

def 拉(self):

# do something

def 撒(self):

# do something

==========================第二部分

上述代码不难看出,吃、喝、拉、撒是猫和狗都具有的功能,而我们却分别的猫和狗的类中编写了两次。

如果使用 继承 的思想,如下实现:

动物:吃、喝、拉、撒

猫:喵喵叫(猫继承动物的功能)

狗:汪汪叫(狗继承动物的功能)

伪代码如下:

class 动物:

def 吃(self):

# do something

def 喝(self):

# do something

def 拉(self):

# do something

def 撒(self):

# do something

# 在类后面括号中写入另外一个类名,表示当前类继承另外一个类

class 猫(动物):

def 喵喵叫(self):

print '喵喵叫'

# 在类后面括号中写入另外一个类名,表示当前类继承另外一个类

class 狗(动物):

def 汪汪叫(self):

print '喵喵叫'

==========================第三部分

#继承的代码实现

class Animal:

def eat(self):

print("%s 吃 " %self.name)

def drink(self):

print ("%s 喝 " %self.name)

def shit(self):

print ("%s 拉 " %self.name)

def pee(self):

print ("%s 撒 " %self.name)

class Cat(Animal):

def __init__(self, name):

self.name = name

self.breed = '猫'

def cry(self):

print('喵喵叫')

class Dog(Animal):

def __init__(self, name):

self.name = name

self.breed='狗'

def cry(self):

print('汪汪叫')

# ######### 执行 #########

c1 = Cat('小白家的小黑猫')

c1.eat()

c2 = Cat('小黑的小白猫')

c2.drink()

d1 = Dog('胖子家的小

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值