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教程:函数快速入门

    函数的定义和使用 def test(x): # x代表形参 ”’ 2*x+1 :param x:整形数字 :return:返回计算结果 ”’ y = 2*x+1 return y p = test(3) # test()表示运行名为test函数,3代表实参,给x进行赋值 print(p) 函数的定义: def: 表示函数的关键字 函数名: 函数的名称, …

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

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

    Python开发 2023年4月2日
    00
  • Python教程:用__new__ 创建单例模式

    1.用 __new__方法 class Singleton(object): def __new__(cls): if not hasattr(cls,’_instance’): cls._instance=super(Singleton,cls).__new__(cls) # cls.__instance = object.__new__(cls) #这样…

    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学习:获取代理ip以及使用

    python爬虫浏览器伪装 #导入urllib.request模块 import urllib.request #设置请求头 headers=(“User-Agent”,”Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22…

    Python开发 2023年4月2日
    00
  • python去除列表中重复元素的方法

    列表中元素位置的索引用的是L.index 本文实例讲述了Python去除列表中重复元素的方法。分享给大家供大家参考。具体如下: 比较容易记忆的是用内置的set l1 = [‘b’,’c’,’d’,’b’,’c’,’a’,’a’] l2 = list(set(l1)) print (l2) 还有一种据说速度更快的,没测试过两者的速度差别 l1 = [‘b’,’…

    Python开发 2023年4月2日
    00
  • Python爬虫学习:Cookie 和 Session 的区别是什么?

    一、 含义 Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。 由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份,怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携…

    Python开发 2023年4月2日
    00
  • Python 避免字典和元组的多重嵌套

    一、字典、元组的多重嵌套 例 1:记录全班学生的成绩。 分析:定义一个 SimpleGradebook类, 学生名是字典self._grades的键,成绩是字典self._grades的值。 class SimpleGradebook(): def __init__(self): self._grades = {} def add_student(self,…

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