Python - 方法重写



Python 中的方法重写

Python 的方法重写是指在子类中定义一个与父类中方法同名的方法。在这种情况下,Python 解释器会根据实际引用的对象在运行时确定调用哪个方法。

你可以随时重写父类的方法。重写父类方法的一个原因是,你可能希望在子类中实现特殊或不同的功能。

示例

在下面的代码中,我们重写了父类的名为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 中的方法重写,让我们来看另一个例子。我们使用以下 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

接下来,我们定义一个 SalesOfficer 类,它使用 Employee 作为父类。它继承了父类的实例变量 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 ("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 类的父类。你可以在自己的类中重写这些方法:

序号 方法、描述和示例调用

1

__init__ ( self [,args...] )

构造函数(带任何可选参数)

示例调用:obj = className(args)

2

__del__( self )

析构函数,删除一个对象

示例调用:del obj

3

__repr__( self )

可计算的字符串表示

示例调用:repr(obj)

4

__str__( self )

可打印的字符串表示

示例调用:str(obj)

广告