Python中方法重写
时间:2020-01-09 10:44:19 来源:igfitidea点击:
在这篇文章中,我们将了解Python中的方法覆盖的工作原理。
什么是方法重写
方法重写,方法覆盖(Method overriding)是一种面向对象的编程概念,它指出子类可以提供其父类之一中已经存在的方法的不同实现。如果子类中的方法与父类中的方法具有相同的名称,相同数量的参数和相同的返回类型,则认为子类将覆盖父类的方法。
Python方法重载示例
在该示例中,存在一个层次结构,其中父类Person具有方法display_info()。子类Employee重写方法display_info()并提供其自己的实现。
class Person: def __init__(self, name, age): self.name = name self.age = age def display_info(self): print('In display_info method of Person class') print('Name:', self.name) print('Age:', self.age) class Employee(Person): def __init__(self, emp_id, department, name, age): super().__init__(name, age) self.emp_id = emp_id self.department = department def display_info(self): Person.display_info(self) print('In display_info method of Employee class') print('Id:', self.emp_id) print('Department:', self.department) e = Employee(1, "IT", "Michael Weyman", 42) e.display_info() p = Person("Michael Weyman", 42) p.display_info()
输出:
In display_info method of Person class Name: Michael Weyman Age: 42 In display_info method of Employee class Id: 1 Department: IT In display_info method of Person class Name: Michael Weyman Age: 42
如我们所见,当我们有一个Employee类的对象时,将调用Employee类(子类)的display_info()方法。如果object是Person类的,则Person类的display_info()方法(调用父类)。
在重写的方法中调用父类的方法
如果需要,可以从子类中调用父类的方法。一种方法是使用类名称CLASS_NAME.method_name(self)。在上面的示例中已经使用了这种方式。
另一种更好的方法是在Python中使用super()函数来调用超类的方法。
class Person: def __init__(self, name, age): self.name = name self.age = age def display_info(self): print('In display_info method of Person class') print('Name:', self.name) print('Age:', self.age) class Employee(Person): def __init__(self, emp_id, department, name, age): super().__init__(name, age) self.emp_id = emp_id self.department = department def display_info(self): super().display_info() print('In display_info method of Employee class') print('Id:', self.emp_id) print('Department:', self.department) e = Employee(1, "IT", "Michael Weyman", 42) e.display_info()
输出:
In display_info method of Person class Name: Michael Weyman Age: 42 In display_info method of Employee class Id: 1 Department: IT
在示例中,我们可以看到使用super()调用父类方法。