专栏首页海天一树小朋友学Python(22):重写与重载

小朋友学Python(22):重写与重载

在学Python的方法重写和重载之前,可以先复习一下Java的重写与重载: 小朋友学Java(8):重写与重载

一、方法重写

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写! 如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法。

例1

class Parent:        
   def myMethod(self):
      print 'Invoke parent method'
class Child(Parent): 
   def myMethod(self):
      print 'Invoke child method'
c = Child()        
c.myMethod()        

运行结果:

Invoke child method

下表列出了一些通用的功能,你可以在自己的类重写:

方法

描述

调用方式

init ( self [,args…] )

构造函数,初始化对象

obj = className(args)

del( self )

析构方法, 删除对象

del obj

str( self )

用于将值转化为适于人阅读的形式

str(obj)

cmp ( self, x )

对象比较

cmp(obj, x)

二、运算符重载

Python的方法重载,可参考Java中的方法重载。 下面介绍一下运算符重载。 以加号为例,加号支持两个整数相加,两个浮点数相加,两个字符串相加

例2

a = 1
b = 2
print a + b

运行结果:

3

例3

a = “Hello “
b = “World!”
print a + b

运行结果:

Hello World!

`

现在假如有一个自定义的二维数据类型Num(x, y),咱们可能通过重载“+”运算符的方式实现:Num(x1, y1) + Num(x2, y2) = Num(x1 + x2, y1 + y2)

例4

class Num:
   def __init__(self, a, b):
      self.a = a
      self.b = b
   def __str__(self):
      return 'Num (%d, %d)' % (self.a, self.b)
   def __add__(self, other):
      return Num(self.a + other.a, self.b + other.b)
n1 = Num(5, 10)
n2 = Num(1, -2)
print n1 + n2

运行结果:

Num(6, 8)

注意 ,这里__add__实现了Num的“+”功能,print方法会调用__str__方法

本文分享自微信公众号 - 海天一树(gh_de7b45c40e8b),作者:海天一树

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-02-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 小朋友学Python(23):类的属性与方法

    (一)类的私有属性 __private_attr:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__pri...

    海天一树
  • 图的深度优先搜索

    图有两种最基本的搜索算法,一种是深度优先搜索,另一种是广度优先搜索。本节先介绍深度优先搜索。

    海天一树
  • CCF关于NOI2020省队选拔的规定

    为规范各省参加CCFNOI(以下简称NOI)选手的选拔方式,中国计算机学会(CCF)制定如下规则。

    海天一树
  • Python爬虫之模拟登录wechat

    不知何时,微信已经成为我们不可缺少的一部分了,我们的社交圈、关注的新闻或是公众号、还有个人信息或是隐私都被绑定在了一起。既然它这么重要,如果我们可以利用爬虫模拟...

    Python数据科学
  • 自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码

    由于最近的项目需要具有复选功能,但过多的复选框会影响界面布局和美观,因而想到把 PyQt5 的下拉列表和复选框结合起来,但在 PyQt5 中并没有这样的组件供我...

    砸漏
  • python实现双向循环链表

    参考https://www.cnblogs.com/symkmk123/p/9693872.html#4080149

    未来sky
  • 隐马尔科夫-维特比算法

    概念介绍:   继上篇贝叶斯(https://cloud.tencent.com/developer/article/1056640)后,一直想完成隐马尔科夫这...

    知然
  • 从0开始的Python学习014面向对象编程

    到目前为止,我们的编程都是根据数据的函数和语句块来设计的,面向过程的编程。还有一种我们将数据和功能结合起来使用对象的形式,使用它里面的数据和方法这种方法叫做面向...

    Happy、Liu
  • 全面深入理解Python面向对象编程

    面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,即:将之前实现的代码块复制到现需功能处。

    顶级程序员
  • PyQt5 创建拼图游戏

    本篇代码由PtQt4官方example代码升级而来。其实现的功能是将图片分割后随机打散,以供用户拖放拼图。

    用户6021899

扫码关注云+社区

领取腾讯云代金券