Python - 方法重写


您始终可以重写父类方法。重写父类方法的原因之一是您可能希望子类中具有特殊或不同的功能。

例子

class Parent: # define parent class
   def myMethod(self):
      print ('Calling parent method')

class Child(Parent): # define child class
   def myMethod(self):
      print ('Calling child method')

c = Child() # instance of child
c.myMethod() # child calls overridden method

执行上述代码时,会产生以下输出-

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

接下来,我们定义一个使用 Employee 作为父类的 SalesOfficer 类。它从父级继承实例变量名称和薪水。此外,子类还有一个实例变量激励。

我们将使用内置函数 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

基本可重写方法

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

先生编号 方法、描述和示例调用

1

__init__ ( 自我 [,args...] )

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

调用示例:obj = className(args)

2

__del__( 自我 )

析构函数,删除对象

示例调用:del obj

3

__repr__( 自我 )

可计算的字符串表示形式

调用示例:repr(obj)

4

__str__( 自我 )

可打印的字符串表示形式

调用示例:str(obj)