在学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__
方法