Python基础编程——多重继承下方法的调用

Posted 梦子mengy7762

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python基础编程——多重继承下方法的调用相关的知识,希望对你有一定的参考价值。

我们介绍了在继承下面调用父类的构造方法,那么在多重继承下如何调用父类的方法呢?虽然在使用多重继承时需要慎重,但是在实际的项目开发中多重继承却随处可见,因此了解多重继承下调用父类的方法也是很有必要的。

多重继承下调用父类的构造方法

在多重继承下如果在父类中显示地重写了构造方法,则在子类中需要调用父类的方法,当父类中需要传入参数时,我们在子类中也需要传入相应的参数,但是为了避免多重继承报错,我们需要使用不定长度参数来接收参数(这只是其中的一种方法)。

具体如下many_extends_call_construction_method.py

程序所示:

many_extends_call_construction_method.py
#!/usr/bin/env python# -*- coding: utf-8 -*-
# 定义一个Person类class Person:    
# 定义构造方法    
def __init__(self, name, age, *args, **kwargs):        
self.name = name        
self.age = age        
print('调用Person类的构造方法')
# 定义一个Student类class Student(Person):    
# 定义构造方法    
def __init__(self, name, age, student_no, native_place, *args, **kwargs):        
super()
.__init__(name, age, *args, **kwargs)        
self.student_no = student_no        
self.native_place = native_place        
print('调用Student类的构造方法')
# 定义一个Teacher类
class Teacher(Person):    
def __init__(self, name, age, course, *args, **kwargs): 
super().__init__(name, age, *args, **kwargs)

self.course = course        
print('调用Teacher类的构造方法')
# 定义一个多重职业者的类,从学生和老师的类继承
class MultipleProfessional(Student, Teacher):    
def __init__(self, name, age, student_no, native_place, course, hobby): 

super().__init__(name, age, student_no, native_place, course)        
self.hobby = hobby        
print('调用MultipleProfessional的构造方法')
print(MultipleProfessional.__mro__)
mp = MultipleProfessional('张三', 20, '20201001', '北京', 'Python', '编程')
程序执行结果如下所示:
(<class '__main__.MultipleProfessional'>, 
<class '__main__.Student'>, <class '__main__.Teacher'>, 
<class '__main__.Person'>, <class 'object'>)
调用Person类的构造方法调用Teacher类的构造方法调用
Student类的构造方法调用MultipleProfessional的构造方法

在上面的程序中,我们在各个类中都使用了可变长度参数来接收参数,避免多重继承下报错,在多重继承下,通过__mro__可以看出多重继承的顺序,以及调用各个父类构造方法的顺序。最后,如果你的时间不是很紧张,并且又想快速的提高,最重要的是不怕吃苦,建议你可以联系维:762459510 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~

多重继承下调用父类的普通方法

既然是继承,那么子类理应获得了父类的所有属性和方法,继承的主要作用之一就是为了使我们编写的程序能够复用,那么在子类中调用父类的普通方法也是理所当然的。当然子类也可以有自己的属性和方法,当父类提供的属性和方法不能满足需求时,我们可以自定义其他的属性和方法也可以通过重写父类的方法来实现目的。具体如下many_extends_call_method.py程序所示:

many_extends_call_method.py
#!/usr/bin/env python# -*-coding: utf-8 -*-
# 定义一个Person类class Person:    
# 定义构造方法    
def __init__(self, name, age, *args, **kwargs):        
self.name = name        
self.age = age        
print('调用Person类的构造方法')    
def speak(self):        
print('你好!我的名字是{},年龄是{}。
'.format(self.name, self.age))
# 定义一个Student类class Student(Person):    
# 定义构造方法    
def __init__(self, name, age, student_no, native_place, *args, **kwargs):  
super().__init__(name, age, *args, **kwargs)        
self.student_no = student_no        
self.native_place = native_place        
print('调用Student类的构造方法')    
def student_say_hi(self):        
print('你好!我是一名学生,我的名字是:{},
我的年龄是:{},我的学号是:{},我来自于:{}。
'.format(self.name, self.age, self.student_no,                                                                     
self.native_place))
# 定义一个Teacher类class Teacher(Person):    
def __init__(self, name, age, course, *args, **kwargs):
super().__init__(name, age, *args, **kwargs)        
self.course = course        
print('调用Teacher类的构造方法')    
def teacher_say_hi(self):        
print('你好!我是一名老师,我的名字是:{},
我的年龄是:{},我现在教授的课程是:{}。
'.format(self.name, 
self.age, self.course))
# 定义一个多重职业者的类,从学生和老师的类继承
class MultipleProfessional(Student, Teacher):    
def __init__(self, name, age, student_no, native_place, course, hobby): 
super().__init__(name, age, student_no, native_place, course)        
self.hobby = hobby        
print('调用MultipleProfessional的构造方法')    
def mp_say_hi(self):        
print('你好!我是一名学生,同时也是一名老师,的名字是:{},
我的年龄是:{},我的学号是:{},我来自:{},

我教授的课程是:{},我的爱好是'              ':{}。
'.format(self.name, self.age, self.student_no, 
self.native_place, self.course, self.hobby))
print(MultipleProfessional.__mro__)
mp = MultipleProfessional('张三', 20, '20201001',
'北京', 'Python', '编程')
mp.speak()mp.student_say_hi()
mp.teacher_say_hi()mp.mp_say_hi()
程序执行结果如下所示:
(<class '__main__.MultipleProfessional'>, 
<class '__main__.Student'>,
<class '__main__.Teacher'>, 
<class '__main__.Person'>, 
<class 'object'>)
调用Person类的构造方法调用Teacher类的构造方法调用
Student类的构造方法调用MultipleProfessional的构造方法
你好!我的名字是张三,年龄是20。
你好!我是一名学生,我的名字是:
张三,我的年龄是:20,我的学号是:20201001,我来自于:北京。

你好!我是一名老师,我的名字是:张三,我的年龄是:20,我现在教授的课程是:Python。

你好!我是一名学生,同时也是一名老师,的名字是:张三,我的年龄是:20,我的学号是:20201001,
我来自:北京,我教授的课程是:Python,我的爱好是:编程。

在上面的程序中,我们在子类对象中调用了一些子类中并没有定义的方法,但是程序却没有报错,这是因为这些方法都继承自父类,当父类中的方法不满足需求时,我们又重新定义了一个只属于子类的方法。如果我们要在子类的定义中调用父类的方法或者属性时,可以使用self关键字或者super函数,但是需要注意的是,调用需要在子类的构造方法后面,否在报没有这样的属性或方法的错误。最后,如果你的时间不是很紧张,并且又想快速的提高,最重要的是不怕吃苦,建议你可以联系维:762459510 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~

总结

本节介绍了多重继承下调用父类的属性和方法(包括构造方法),但是在实际开发中应该避免使用多重继承,当非要使用多重继承解决问题时,应该考虑使用一些设计模式来替换多重继承,而不是直接使用多重继承。

如果有需要文中小程序的可以私信我哟!

创作不容易,还请点个赞!喜欢的小伙伴请点关注、收藏!

欢迎大家转发、评论!

以上是关于Python基础编程——多重继承下方法的调用的主要内容,如果未能解决你的问题,请参考以下文章

区块链开发之Solidity编程基础合约继承抽象合约接口

Python 多重继承:选择要调用的基类方法

python多重继承的属性和方法调用顺序问题和对迭代器的初步理解

Python面向对象多重继承

python

python 中面向对象编程的几个概念