python学习:重用父类功能的两种方式

在子类派生的新方法中如何重用父类的功能
方式一:指名道姓调用某一个类下的函数=》不依赖于继承关系

 class OldboyPeople:
     def __init__(self,name,age,sex):
         self.name=name
         self.age=age
         self.sex=sex

     def f1(self):
         print('%s say hello' %self.name)


 class Teacher(OldboyPeople):
     def __init__(self,name,age,sex,level,salary):
         OldboyPeople.__init__(self,name,age,sex)

         self.level = level
         self.salary=salary

 tea_obj=Teacher('egon',18,'male',10,3000)
 print(tea_obj.__dict__)

方式二:super()调用父类提供给自己的方法=》严格依赖继承关系

调用super()会得到一个特殊的对象,该对象会参照发起属性查找的那个类的mro,去当前类的父类中找属性
提示:在Python2中super的使用需要完整地写成super(自己的类名,self) ,而在python3中可以简写为super()。

 #Python学习交流群:711312441
 class OldboyPeople:
     def __init__(self,name,age,sex):
         self.name=name
         self.age=age
         self.sex=sex

     def f1(self):
         print('%s say hello' %self.name)


 class Teacher(OldboyPeople):
     def __init__(self,name,age,sex,level,salary):
         # super(Teacher,self).__init__(name,age,sex)
         super().__init__(name,age,sex) # 调用的是方法,自动传入对象

         self.level = level
         self.salary=salary

 # print(Teacher.mro())
 tea_obj=Teacher('egon',18,'male',10,3000)
 print(tea_obj.__dict__)

super()案例

class A:
    def test(self):
        print('from A')
        super().test()

class B:
    def test(self):
        print('from B')

class C(A,B):
    pass


obj=C()
obj.test()

print(C.mro())

这两种方式的区别是:

方式一是跟继承没有关系的,而方式二的super()是依赖于继承的,并且即使没有直接继承关系,super()仍然会按照MRO继续往后查找

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python学习:重用父类功能的两种方式 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • Python实现搭建-简单服务器教程

    Python动态服务器网页(需要使用WSGI接口),基本实现步骤如下:1.等待客户端的链接,服务器会收到一个http协议的请求数据报2.利用正则表达式对这个请求数据报进行解析(请求方式、提取出文件的环境)3.提取出文件的环境之后,利用截断取片的方法将文件名转化为模块名称4.使用m = __import__(),就可以得到返回值为m的模块5.创建一个env字典…

    python 2023年4月18日
    00
  • Python学习:len() 函数详解:获取字符串长度或字节数、join()方法:合并字符串

    Python中,要想知道一个字符串有多少个字符(获得字符串长度),或者一个字符串占用多少个字节,可以使用len()函数。 语法格式: len(string) string 用于指定要进行长度统计的字符串 示例: a = ‘www.baidu.com’ print(len(a)) 输出 13 在 Python 中,不同的字符所占的字节数不同,数字、英文字母、小…

    Python开发 2023年4月2日
    00
  • Python:numpy模块最详细的教程

    一、numpy简介 numpy官方文档:https://docs.scipy.org/doc/numpy/reference/?v=20190307135750 numpy是Python的一种开源的数值计算扩展库。这种库可用来存储和处理大型numpy数组,比Python自身的嵌套列表结构要高效的多(该结构也可以用来表示numpy数组)。 numpy库有两个作…

    Python开发 2023年3月31日
    00
  • Python深浅拷贝的理解

    1.拷贝 拷贝实际上其实就是在赋值,比如我们有一个列表L1,定义另一个列表L2引用列表L1,实际上就是在拷贝列表L1的值,由于由于L1列表是可变的数据类型,所以当L1的值变的时候,L2的值也是在跟着变的.那其实就算L1内的是不可变的数据类型,L1的内容变化,L2的内容也一样会随之变化的 # # 拷贝(赋值) # Python学习交流QQ群:153708845…

    Python开发 2023年3月31日
    00
  • 5个python中编程的大坑

    对于Python新手来说,写代码很少考虑代码的效率和简洁性,因此容易造成代码冗长、执行慢,这些都是需要改进的地方。本文是想通过几个案列给新手一点启发,怎样写python代码更优雅。 大坑一:不喜欢使用高级数据结构 1.sets(集合) 很多新手忽视sets(集合)和tuple(元组)的强大之处 例如,取两个列表交集: def common_elements(…

    Python开发 2023年3月31日
    00
  • Python学习:dict和set类型的用法

    1.什么是dict 我们已经知道,list 和 tuple 可以用来表示顺序集合,例如,班里同学的名字: [‘Adam’, ‘Lisa’, ‘Bart’] 或者考试的成绩列表: [95, 85, 59] 但是,要根据名字找到对应的成绩,用两个 list 表示就不方便。 如果把名字和分数关联起来,组成类似的查找表: ‘Adam’ ==> 95 ‘Lisa…

    Python开发 2023年4月2日
    00
  • python练习题:求10万以内的质数

    1、使用质数定义计算 #version1import datetime #导入模块计算效率start = datetime.datetime.now() count = 0 for x in range(2,100000): #求指定范围内的质数 for i in range(2,x): #除以1和本身之外的数 if x % i == 0: break el…

    Python开发 2023年4月2日
    00
  • python学习:获取指定目录下所有文件名os.walk和os.listdir

    1.os.walk 返回指定路径下所有文件和子文件夹中所有文件列表 其中文件夹下路径如下: import os def file_name_walk(file_dir): for root, dirs, files in os.walk(file_dir): print(“root”, root) # 当前目录路径 print(“dirs”, dirs) #…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部