函数继承是OOP编程中常用的特性之一。它可以帮助我们避免重复的代码,提高代码的复用性。Python中的函数继承相对其他OOP语言更为灵活,可以通过多种方式实现。下面详细讲解Python函数继承的完整攻略,包含以下几个方面:
- 父类和子类基本概念
- 函数继承的方式
- 子类重写父类函数
- super()函数的使用
父类和子类基本概念
在Python中,我们可以使用class定义一个类,class的实例化即为对象。类有一个重要的概念,那就是父类和子类。
父类指的是在继承关系中被继承的类,也称为基类或超类。子类指的是继承父类的类,也称为派生类或衍生类。
我们可以通过继承父类的方式在子类中复用父类的属性和方法。
函数继承的方式
在Python中,函数继承一般有以下两种方式。
方式一:直接继承
直接继承可以直接在子类中使用父类的方法。
# 定义一个父类
class ParentClass:
def parent_method(self):
print("This is parent method.")
# 定义一个子类,直接继承父类
class ChildClass(ParentClass):
pass
# 实例化子类
child = ChildClass()
# 调用父类方法
child.parent_method() # 输出 This is parent method.
在上面的代码中,我们定义了一个ParentClass类和一个ChildClass类。ChildClass类继承了ParentClass类,所以ChildClass能够访问和使用ParentClass类中的parent_method()函数。
方式二:重写继承
重写继承是指在子类中对父类方法进行修改或者完善。在这种情况下,我们需要注意的是必须实例化子类,并调用子类中的函数。
# 定义一个父类
class ParentClass:
def parent_method(self):
print("This is parent method.")
# 定义一个子类,重写父类方法
class ChildClass(ParentClass):
def parent_method(self):
print("This is child method.")
# 实例化子类
child = ChildClass()
# 调用子类方法
child.parent_method() # 输出 This is child method.
在上面的代码中,我们定义了一个ParentClass类和一个ChildClass类。ChildClass类继承了ParentClass类,并重写了parent_method()函数。在实例化子类后,我们调用了它内部的parent_method()函数,输出了 This is child method.。
子类重写父类函数
在重写继承的情况下,子类可以重写(override)父类的方法。即在子类中定义和父类同名的方法,实现自己的功能。这样,当我们调用子类的方法时,就会自动调用子类的方法。
# 定义一个父类
class ParentClass:
def my_method(self):
print("This is parent method.")
# 定义一个子类,重写父类方法
class ChildClass(ParentClass):
def my_method(self):
print("This is child method.")
# 实例化子类
child = ChildClass()
# 调用子类方法
child.my_method() # 输出 This is child method.
在上面的代码中,我们定义了一个ParentClass类和一个ChildClass类。ChildClass类继承了ParentClass类,并重写了my_method()函数。在实例化子类后,我们调用了它内部的my_method()函数,输出了 This is child method.。
super()函数的使用
如果我们在重写继承的情况下,想要调用父类方法中的代码,可以使用super()函数。在子类中,我们可以使用super()函数,调用父类中的方法。
# 定义一个父类
class ParentClass:
def __init__(self, x, y):
self.x = x
self.y = y
def sum(self):
return self.x + self.y
# 定义一个子类,重写父类方法
class ChildClass(ParentClass):
def product(self):
result = super().sum()
return self.x * self.y * result
# 实例化子类
child = ChildClass(2, 3)
# 调用子类方法
print(child.product()) # 输出 30
在上面的代码中,我们定义了一个ParentClass类和一个ChildClass类。ChildClass类继承了ParentClass类,并重写了product()函数。在product()函数中,我们调用了父类中的sum()函数,并使用super()函数实现。在实例化子类后,我们调用了它内部的product()函数,返回了30。