0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

python子类定制父类及多态调用介绍

jf_78858299 来源:梯阅线条 作者:小梯子 2023-02-23 14:51 次阅读

python通过子类继承超类来定制子类的行为。

1.1 重写类方法

(1)如果子类和超类有同名方法,根据搜索树规则,优先调用子类方法。

(2)子类重写超类方法:在子类定义和父类已有的同名的方法。

(3)一般是对父类方法的加强,即存在父类方法的处理逻辑。

1.2 父类名.方法名

用法

class SupClass:
   def methodA(self):pass
   
class SubClass(SupClass):
   def methodA(self):
       SupClass.methodA(self)
       pass

描述

在子类,通过“父类名.方法名”调用父类同名方法,达到简化代码的效果。

SupClass.methodA(self):

(1)通过“类名.方法名”调用方法时,需要送一个实例给方法。

(2)self为当前调用方法的实例,故需显式将self送给父类方法。

1.3 多态

python子类如果重写超类的方法,那么根据搜索树规则:

超类实例对象,会调用超类的同名方法;

子类实例对象,会调用子类的同名方法;

即,会根据当前调用实例,自动调用对应的方法。

条件:

(1) 继承:多态发生在子类和超类之间

(2) 重写:子类重写父类方法。

1.4 示例

class Tool:
   def payraise(self,p,*args):
       p.payraise(*args)
       
class MyPerson:
   def __init__(self,name,job = None,pay = 0):
       self.name = name
       self.job = job
       self.pay = pay
   def payraise(self,rate):
       self.pay = int(self.pay * (1 + rate))
   def __str__(self):
       return 'MyPerson:name={0.name},job={0.job},pay={0.pay}'.format(self)

class MyManager(MyPerson):# 继承
   # 重写
   def payraise(self,rate,bonus=0.1):
       MyPerson.payraise(self,rate+bonus)
       
if __name__ == '__main__':
   mp1 = MyPerson('mp1')
   mp2 = MyPerson('mp2','c++开发',20000)
   mm1 = MyManager('mm1','开发经理',50000)
   
   print(mp1)
   print(mp2)
   print(mm1)
   
   mp2.payraise(0.1)
   mm1.payraise(0.1)
   print(mp2)
   print(mm1)  
   
   print('#'*10+'多态'+'#'*10)
   for p in (mp1,mp2,mm1):
       p.payraise(0.1)
       print(p)
       
   t = Tool()
   
   print('#'*10+'多态'+'#'*10)
   for p in (mp1,mp2,mm1):
       t.payraise(p,0.1)
       print(p)
# 打开cmd,执行下面示例
E:\\documents\\F盘>python myperson.py
MyPerson:name=mp1,job=None,pay=0
MyPerson:name=mp2,job=c++开发,pay=20000
MyPerson:name=mm1,job=开发经理,pay=50000
MyPerson:name=mp2,job=c++开发,pay=22000
MyPerson:name=mm1,job=开发经理,pay=60000
##########多态##########
MyPerson:name=mp1,job=None,pay=0
MyPerson:name=mp2,job=c++开发,pay=24200
MyPerson:name=mm1,job=开发经理,pay=72000
##########多态##########
MyPerson:name=mp1,job=None,pay=0
MyPerson:name=mp2,job=c++开发,pay=26620
MyPerson:name=mm1,job=开发经理,pay=86400
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程语言
    +关注

    关注

    10

    文章

    1945

    浏览量

    34737
  • python
    +关注

    关注

    56

    文章

    4797

    浏览量

    84689
收藏 人收藏

    评论

    相关推荐

    请教:子类数据流使用后数据类型就变成了而不是子类

    本帖最后由 wyq95361977 于 2016-6-29 19:50 编辑 在练习系时碰到一个问题例子中使用信号灯再使用定时器,的关系还是不变都是子类但是我在练习时数据流
    发表于 06-29 19:40

    建立即其子类的同名方法——关于重写VI的问题

    随着项目的进行,发现的重要性,最近学习时遇到了一些问题:按照《宝典》的介绍(P353),创建了一个运算作为,又创建了一个加法
    发表于 09-23 17:07

    3分钟看懂Python面向对象

    的直接感觉是这是一种复用代码的行为。继承可以理解为它是以普通的为基础建立专门的对象,子类和它继承的是IS-A的关系。多重继承:不同于
    发表于 06-08 14:20

    如何使用Python? 优势有哪些?

    多态  如果子类继承了,但是又想改变的方法,则这时无须修改
    发表于 07-30 18:08

    python的继承

    python的继承的继承,跟人类繁衍的关系相似。被继承的称为基(也叫做
    发表于 03-08 16:40

    python多态的property属性

    python多态多态,是指在同一型下的不同形态。比如下面这段代码class People: def speak(self):passc
    发表于 03-09 16:38

    详解IO设备管理之父调用子类方法的过程

    ,对象创建和初始化流程结束。——这个注册过程映射到面向对象中,是继承方法后子类改写方法的过程。2.2.2 再看对象使用从上往下
    发表于 10-09 15:18

    探讨一下JAVA子类调用构造器函数

    ;#125;子类 调用 的构造函数:(构造函数不会被继承,只是被子类调用而已)1、
    发表于 10-19 14:51

    更好地理解SystemVerilog的多态Polymorphism

    保存子类对象,并直接使用句柄来调用子类的方法。因此,SystemVerilog中的多态性是一
    发表于 12-05 17:34

    python的继承详解

    python的继承 的继承,跟人类繁衍的关系相似。 被继承的称为基(也叫做
    的头像 发表于 03-08 16:40 3103次阅读

    python多态的property属性

    python多态 多态,是指在同一型下的不同形态。 比如下面这段代码 class People: def speak(self): p
    的头像 发表于 03-09 16:37 1265次阅读

    浅析JVM虚方法表和方法调用

    今天我们来填坑,在之前的一篇文章深挖⾯向对象编程三⼤特性 --封装、继承、多态中 我们遗留了一个问题:当引用指向子类对象时,JVM是如何知晓调用
    的头像 发表于 03-02 09:57 913次阅读
    浅析JVM虚方法表和方法<b class='flag-5'>调用</b>

    子类中继承的方法

    首先得在中创建一个方法,利用创建的方法的格式void+方法名(){},然后在子类调用这个方法:直接输入方法名,再按enter,便会出现super.方法名(),表示
    的头像 发表于 04-06 14:53 1410次阅读
    <b class='flag-5'>子类</b>中继承<b class='flag-5'>父</b><b class='flag-5'>类</b>的方法

    super调用的构造方法

    我们分析这句话“对象的引用”,那说明我们使用的时候只能在子类中使用,既然是对象的引用,那么我们也可以用来调用成员属性以及成员方法,当然了,这里的 super 关键字还能够
    的头像 发表于 10-10 16:42 915次阅读
    super<b class='flag-5'>调用</b><b class='flag-5'>父</b><b class='flag-5'>类</b>的构造方法

    java子类可以继承的什么

    Java是一种面向对象的编程语言,它支持继承的概念。继承是面向对象编程的三大特性之一,它允许一个(称为子类或派生)继承另一个(称为
    的头像 发表于 08-20 11:02 1204次阅读