在 Python 中,方法重写指的是在一个子类中定义与父类中相同名称的方法。在这种情况下,Python 解释器会根据实际引用的对象来决定调用哪个方法。
你可以总是覆盖父类的方法。覆盖父类方法的一个原因是,你可能希望在你的子类中有特殊或不同的功能。
示例
在下面的代码中,我们覆盖了 Parent
类中的一个名为 myMethod
的方法。
class Parent:
def myMethod(self):
print ('调用父类方法')
class Child(Parent):
def myMethod(self):
print ('调用子类方法')
c = Child()
c.myMethod()
当执行上述代码时,它会产生以下输出:
调用子类方法
为了理解 Python 中的方法重写,让我们再看一个例子。我们将使用下面的 Employee
类作为父类:
class Employee:
def __init__(self, nm, sal):
self.name = nm
self.salary = sal
def getName(self):
return self.name
def getSalary(self):
return self.salary
接下来,我们定义一个使用 Employee
作为父类的 SalesOfficer
类。它继承了父类中的实例变量 name
和 salary
。另外,子类还有一个额外的实例变量 incentive
。
我们将使用内置函数 super()
来返回父类的引用,并在子类构造函数 __init__()
方法中调用父类构造函数。
class SalesOfficer(Employee):
def __init__(self, nm, sal, inc):
super().__init__(nm, sal)
self.incnt = inc
def getSalary(self):
return self.salary + self.incnt
getSalary()
方法被重写以将激励加到工资上。
示例
声明父类和子类的对象,并查看覆盖的效果。完整的代码如下:
class Employee:
def __init__(self, nm, sal):
self.name = nm
self.salary = sal
def getName(self):
return self.name
def getSalary(self):
return self.salary
class SalesOfficer(Employee):
def __init__(self, nm, sal, inc):
super().__init__(nm, sal)
self.incnt = inc
def getSalary(self):
return self.salary + self.incnt
e1 = Employee("Rajesh", 9000)
print ("{} 的总工资是 Rs {}".format(e1.getName(), e1.getSalary()))
s1 = SalesOfficer('Kiran', 10000, 1000)
print ("{} 的总工资是 Rs {}".format(s1.getName(), s1.getSalary()))
当你执行这段代码时,它将产生以下输出:
Rajesh 的总工资是 Rs 9000
Kiran 的总工资是 Rs 11000
可重写的基方法
下表列出了一些 object
类的一般功能,它是所有 Python 类的父类。你可以在自己的类中覆盖这些方法:
序号 |
方法 & 描述 & 样例调用 |
1 |
__init__ ( self [,args...] ) 构造函数(带有任何可选参数) |
2 |
__del__( self ) 析构函数,删除对象 |
3 |
__repr__( self ) 可评估字符串表示形式 |
4 |
__str__( self ) 可打印字符串表示形式 |