小朋友学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 条评论
登录 后参与评论

相关文章

来自专栏hbbliyong

Python正则进阶

  返回一个列表,如果正则表达式中没有分组,则列表中包含的是所有匹配的内容,如果正则表达式中有分组,则列表中的每个元素是一个元组,元组中包含子分组中匹配到的内容...

16830
来自专栏CSDN技术头条

在下函数式编程,有何贵干?

本文简单介绍了一下函数式编程的各种基本特性,希望能够对于准备使用函数式编程的人起到一定入门作用。 ? 函数式编程,一个一直以来都酷,很酷,非常酷的名词。虽然诞生...

21170
来自专栏lulianqi

abstract virtaul override new 及多态

abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽...

12420
来自专栏数据科学学习手札

(数据科学学习手札45)Scala基础知识

  由于Spark主要是由Scala编写的,虽然Python和R也各自有对Spark的支撑包,但支持程度远不及Scala,所以要想更好的学习Spark,就必须熟...

10320
来自专栏C++

python笔记:#005#算数运算符

19720
来自专栏HelloCode开发者学习平台

BAT面试算法进阶(3)-无重复字符的最长子串

Given a string, find the length of the longest substring without repeating char...

9410
来自专栏青玉伏案

窥探Swift之别样的枚举类型

  想必写过程序的童鞋对枚举类型并不陌生吧,使用枚举类型的好处是多多的,在这儿就不做过多的赘述了。Fundation框架和UIKit中的枚举更是数不胜数,枚举可...

21470
来自专栏阮一峰的网络日志

字符串匹配的KMP算法

字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD...

53960
来自专栏程序你好

Java中Null Object 设计模式

今天,我将讨论较少使用的空对象模式。在面向对象编程中,我们经常处理空对象。空对象是指没有任何引用的对象,或者定义为中性/空功能/行为的对象。在访问任何成员或调用...

35240
来自专栏技术沉淀

Python: collections模块实例透析Collections模块

20480

扫码关注云+社区

领取腾讯云代金券