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

xiaoxiao2021-02-28  29

在学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 objstr( 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) <div class="se-preview-section-delimiter"></div> ###例4 <div class="se-preview-section-delimiter"></div>

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

运行结果: <div class="se-preview-section-delimiter"></div>

Num(6, 8) “`

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

更多内容请关注微信公众号

转载请注明原文地址: https://www.6miu.com/read-2631592.html

最新回复(0)