Python 中的方法覆盖
Python 方法覆盖是指在子类中定义一个方法,其名称与其超类中的方法相同。在这种情况下,Python 解释器根据所引用的实际对象确定在运行时调用哪个方法。
您始终可以覆盖父类方法。覆盖 parent's methods 的一个原因是你可能希望在 subclass 中使用特殊或不同的功能。
例在下面的代码中,我们将覆盖 Parent 类的名为 myMethod 的方法。
# define parent class
class Parent:
def myMethod(self):
print ('Calling parent method')
# define child class
class Child(Parent):
def myMethod(self):
print ('Calling child method')
# instance of child
c = Child()
# child calls overridden method
c.myMethod()
执行上述代码时,它会生成以下输出 -
Calling child method
要了解 Python 中的 Method Overrided,让我们再举一个例子。我们使用以下 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 和 saliation。此外,子类还有一个实例变量激励。
我们将使用内置函数 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() 方法重写以将激励添加到 salary。
例声明父类和子类的对象,并查看重写的效果。完整代码如下 -
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 ("Total salary for {} is Rs {}".format(e1.getName(),e1.getSalary()))
s1=SalesOfficer('Kiran', 10000, 1000)
print ("Total salary for {} is Rs {}".format(s1.getName(),s1.getSalary()))
当您执行此代码时,它将生成以下输出 -
Total salary for Rajesh is Rs 9000
Total salary for Kiran is Rs 11000
Total salary for Kiran is Rs 11000
下表列出了 object 类的一些通用功能,该类是所有 Python 类的父类。您可以在自己的类中覆盖这些方法 -
方法 | 描述和示例调用 |
---|---|
__init__ ( self [,args...] ) |
构造函数(带有任何可选参数) 示例调用:obj = className(args) |
__del__( self ) |
Destructor,删除对象 样本调用 : del obj |
__repr__( self ) |
可评估的字符串表示 示例调用:repr(obj) |
__str__( self ) |
可打印的字符串表示 采样调用:str(obj) |