python的几种编写方法(Python基础编程多重继承下方法的调用)

在之前的章节中我们介绍了在继承下面调用父类的构造方法,那么在多重继承下如何调用父类的方法呢?虽然在使用多重继承时需要慎重,但是在实际的项目开发中多重继承却随处可见,因此了解多重继承下调用父类的方法也是很有必要的,下面我们就来说一说关于python的几种编写方法?我们一起去了解并探讨一下这个问题吧!

python的几种编写方法(Python基础编程多重继承下方法的调用)

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__可以看出多重继承的顺序,以及调用各个父类构造方法的顺序。

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

既然是继承,那么子类理应获得了父类的所有属性和方法,继承的主要作用之一就是为了使我们编写的程序能够复用,那么在子类中调用父类的普通方法也是理所当然的。当然子类也可以有自己的属性和方法,当父类提供的属性和方法不能满足需求时,我们可以自定义其他的属性和方法也可以通过重写父类的方法来实现目的。具体如下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函数,但是需要注意的是,调用需要在子类的构造方法后面,否在报没有这样的属性或方法的错误。

总结

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

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

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

欢迎大家转发、评论!

#Python##Python基础##Python编程从入门到实践##Python入门推荐#

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页