前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小朋友学Python(22):重写与重载

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

作者头像
海天一树
发布2018-04-17 11:55:23
8130
发布2018-04-17 11:55:23
举报
文章被收录于专栏:海天一树海天一树

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

一、方法重写

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

例1

代码语言:javascript
复制
class Parent:        
   def myMethod(self):
      print 'Invoke parent method'
class Child(Parent): 
   def myMethod(self):
      print 'Invoke child method'
c = Child()        
c.myMethod()        

运行结果:

代码语言:javascript
复制
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

代码语言:javascript
复制
a = 1
b = 2
print a + b

运行结果:

代码语言:javascript
复制
3

例3

代码语言:javascript
复制
a = “Hello “
b = “World!”
print a + b

运行结果:

代码语言:javascript
复制
Hello World!

`

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

例4

代码语言:javascript
复制
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

运行结果:

代码语言:javascript
复制
Num(6, 8)

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海天一树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、方法重写
    • 例1
    • 二、运算符重载
      • 例2
        • 例3
          • 例4
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档