Python - 方法覆盖



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

下表列出了 object 类的一些通用功能,该类是所有 Python 类的父类。您可以在自己的类中覆盖这些方法 -

方法 描述和示例调用

__init__ ( self [,args...] )

构造函数(带有任何可选参数)
示例调用:obj = className(args)

__del__( self )

Destructor,删除对象
样本调用 : del obj

__repr__( self )

可评估的字符串表示
示例调用:repr(obj)

__str__( self )

可打印的字符串表示
采样调用:str(obj)