• 前言
  • 一、使用继承
  • 1、在子类中使用父类中的方法,调用的方法直接传参
  • 2、在子类中使用父类中的方法,调用的方法间接传参(父类里面的方法有嵌套)
  • 总结



前言

记录Python中继承中调用函数的用法


一、使用继承

1、在子类中使用父类中的方法,调用的方法直接传参

(1)在子类中使用父类的实例对象来调用方法

ios 执行子类方法 子类使用父类的方法_ios 执行子类方法

 注意:

dog().eat("苹果") 中,dog()就是dog类的实例,eat("苹果")中的苹果就是直接传参。

(2)在子类中使用父类的类名来调用方法。(注意:一般不用这种方式)

ios 执行子类方法 子类使用父类的方法_ios 执行子类方法_02

注意点:

dog.eat(self, "葡萄")这里的self,其实是pig这个类的对象,使用断点的方式就可以看出: 

 

ios 执行子类方法 子类使用父类的方法_子类_03

如果把self改成pig和dog其实也能够执行成功。

ios 执行子类方法 子类使用父类的方法_子类_04

 

ios 执行子类方法 子类使用父类的方法_ios 执行子类方法_05

 那么就有个问题:为什么改成pig和dog都可以成功呢?

我们可以看到这个方法(函数)本身是dog类的里面的,现在现在self改成dog,也就是dog类的实例对象去调用这个方法(函数)当然是可以的。

但是为什么self改成pig也是可以的,我们知道,现在使用的是继承,那么继承的特性就是可以用父类的方法(函数),self就算改成了pig,其实本质上还是dog。这就是继承的特性。我既然已经继承了父类的方法(函数),当然就可以填写pig了。

其实最好,我们也不用这么纠结,直接使用self,也不用这么繁琐的去理解。

(3)在子类中使用  self.方法名  来调用方法。(常用)

ios 执行子类方法 子类使用父类的方法_父类_06

2、在子类中使用父类中的方法,调用的方法间接传参(父类里面的方法有嵌套)

知识回顾:

ios 执行子类方法 子类使用父类的方法_父类_07

那我们知道这种直接传参其实并不建议,我们建议的是形参,也就是标题说的间接传参 。

那这个函数就需要改造一下:

ios 执行子类方法 子类使用父类的方法_子类_08

 函数改造好之后,那么就可以用之前讲的三种方式来调用:

(1)使用      self.方法名    的方式来调用父类的方法(函数)------最常用

ios 执行子类方法 子类使用父类的方法_子类_09

(2)使用父类的实例化对象(或者子类的实例化对象)来调用父类中的方法----基本上不会这么用

ios 执行子类方法 子类使用父类的方法_子类_10

ios 执行子类方法 子类使用父类的方法_子类_11

补充点:

在这里我所说的实例化对象其实正确的叫法叫做:实例化

dog1=dog()

dog()叫做实例化;dog1叫做实例化对象

(3)使用  类名.方法名  去调用父类的函数--------基本上不会这么用

ios 执行子类方法 子类使用父类的方法_python_12

 

ios 执行子类方法 子类使用父类的方法_ios 执行子类方法_13

 注意:

这里的self不能改成pig或者dog,改了就会报错

ios 执行子类方法 子类使用父类的方法_ios 执行子类方法_14

 

ios 执行子类方法 子类使用父类的方法_python_15

 如果硬是要用这个  类名.方法名  的方式来调函数,那么就要在父类函数中做修改:

ios 执行子类方法 子类使用父类的方法_子类_16

记录:

虽然我们用了上面三种方式去调用函数,但是实际上我们想一个问题,既然都用了继承了,那么为什么还要用这种复杂的方式去调用了。我们直接使用   self.方法名   就行了。不要用那些奇奇怪怪的方法。统一一下思想。但是我们对上诉的其他方式调用也必须了解(因为你不知道后面有哪个大神写的代码就喜欢用些奇奇怪怪的方式,导致自己想半天也想不同。)


总结

暂无