python基础(24):面向对象三大特性一(继承)

网友投稿 333 2022-06-19


1. 继承

1.1 什么是继承

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

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

class ParentClass1: #定义父类

  pass

 

class ParentClass2: #定义父类

  pass

 

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

  pass

 

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

  pass

查看继承:

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

(,)

>>> SubClass2.__bases__

(, )

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

>>> ParentClass1.__bases__

(,)

>>> ParentClass2.__bases__

(,)

1.2 继承与抽象

抽象即抽取类似或者说比较像的部分。

抽象分成两个层次:

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

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

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

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

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

1.3 继承与重用性

使用继承来解决代码重用的例子:

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

例如

 

  猫可以:吃、喝、爬树

 

  狗可以:吃、喝、看家

 

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

 

 

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

class 猫:

 

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

 

 

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

上述代码不难看出,吃、喝是猫和狗都具有的功能,而我们却分别的猫和狗的类中编写了两次。如果使用 继承 的思想,如下实现:

 

  动物:吃、喝

 

   猫:爬树(猫继承动物的功能)

 

   狗:看家(狗继承动物的功能)

 

伪代码如下:

class 动物:

 

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)

 

class Cat(Animal):

 

def __init__(self, name):

self.name = name

self.breed = '猫'

 

def climb(self):

print('爬树')

 

class Dog(Animal):

 

def __init__(self, name):

self.name = name

self.breed='狗

共5页: 上一页12345下一页


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python基础(23):面向过程与面向对象的优劣、初识面向对象(python既支持面向过程,也支持面向对象)
下一篇:python基础(25):面向对象三大特性二(多态、封装)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~