面向对象-初简介3

Posted lishun412

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象-初简介3相关的知识,希望对你有一定的参考价值。

面向对象

二、继承:

  继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的类容。

  

  例如:

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

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

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

  

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

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

  动物:吃、喝、拉、撒

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

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

 

 

技术分享图片
 1 class 动物:
 2 
 3     def 吃(self):
 4         # do something
 5 
 6     def 喝(self):
 7         # do something
 8 
 9     def 拉(self):
10         # do something
11 
12     def 撒(self):
13         # do something
14 
15 # 在类后面括号中写入另外一个类名,表示当前类继承另外一个类
16 class 猫(动物):
17 
18     def 喵喵叫(self):
19         print 喵喵叫
20         
21 # 在类后面括号中写入另外一个类名,表示当前类继承另外一个类
22 class 狗(动物):
23 
24     def 汪汪叫(self):
25         print 喵喵叫
View Code

 

 

 1 class Animal:
 2 
 3     def eat(self):
 4         print "%s 吃 " %self.name
 5 
 6     def drink(self):
 7         print "%s 喝 " %self.name
 8 
 9     def shit(self):
10         print "%s 拉 " %self.name
11 
12     def pee(self):
13         print "%s 撒 " %self.name
14 
15 
16 class Cat(Animal):
17 
18     def __init__(self, name):
19         self.name = name
20         self.breed = 
21 
22     def cry(self):
23         print 喵喵叫
24 
25 class Dog(Animal):
26     
27     def __init__(self, name):
28         self.name = name
29         self.breed = 
30         
31     def cry(self):
32         print 汪汪叫
33         
34 
35 # ######### 执行 #########
36 
37 c1 = Cat(小白家的小黑猫)
38 c1.eat()
39 
40 c2 = Cat(小黑的小白猫)
41 c2.drink()
42 
43 d1 = Dog(胖子家的小瘦狗)
44 d1.eat()
45 
46 代码实例

所以,对于面向对象的继承来说,其实就是将多个类共有的方法提取到父类中,子类仅需继承父类而不必一一实现每个方法。

注:除了子类和父类的称谓,你可能看到过 派生类 和 基类 ,他们与子类和父类只是叫法不同而已。

技术分享图片

学习了继承的写法之后,我们用代码来是上述阿猫阿狗的功能:

 1 class Animal:
 2 
 3     def eat(self):
 4         print "%s 吃 " %self.name
 5 
 6     def drink(self):
 7         print "%s 喝 " %self.name
 8 
 9     def shit(self):
10         print "%s 拉 " %self.name
11 
12     def pee(self):
13         print "%s 撒 " %self.name
14 
15 
16 class Cat(Animal):
17 
18     def __init__(self, name):
19         self.name = name
20         self.breed = 
21 
22     def cry(self):
23         print 喵喵叫
24 
25 class Dog(Animal):
26     
27     def __init__(self, name):
28         self.name = name
29         self.breed = 
30         
31     def cry(self):
32         print 汪汪叫
33         
34 
35 # ######### 执行 #########
36 
37 c1 = Cat(小白家的小黑猫)
38 c1.eat()
39 
40 c2 = Cat(小黑的小白猫)
41 c2.drink()
42 
43 d1 = Dog(胖子家的小瘦狗)
44 d1.eat()
45 
46 代码实例

1、Python的类可以继承多个类,Java和C#中则只能继承一个类

2、Python的类如果继承了多个类,那么其寻找方法的方式有两种,分别是:深度优先广度优先

技术分享图片

  • 当类是经典类时,多继承情况下,会按照深度优先方式查找
  • 当类是新式类时,多继承情况下,会按照广度优先方式查找

经典类和新式类,从字面上可以看出一个老一个新,新的必然包含了跟多的功能,也是之后推荐的写法,从写法上区分的话,如果 当前类或者父类继承了object类,那么该类便是新式类,否则便是经典类。

 

经典类:首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去D类中找,如果D类中么有,则继续去C类中找,如果还是未找到,则报错

新式类:首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去C类中找,如果C类中么有,则继续去D类中找,如果还是未找到,则报错

注意:在上述查找过程中,一旦找到,则寻找过程立即中断,便不会再继续找了

以上是关于面向对象-初简介3的主要内容,如果未能解决你的问题,请参考以下文章

面向对象-初简介2

VSCode自定义代码片段——JS中的面向对象编程

Python3-初识别面向对象

VSCode自定义代码片段9——JS中的面向对象编程

leadJS初构建

JAVA学习面向对象之 扑克牌(初)