Python中重写(override)

Python中重写(override)

Python中,有重写(override)的概念,但是没有严格意义上的重载(overload)。

类继承时,子类可以重新定义父类中已有的方法,称为重写(Override)。

在Python中,没有像其他语言(如C++)那样的函数重载(Overload)机制。函数重载是指在同一作用域内允许多个函数具有相同的名称,但参数列表不同。在Python中,函数名唯一地绑定到函数对象,无法通过参数列表的差异来区分调用不同版本的函数。但是,可以使用参数的默认值或者可变数量参数来实现类似重载的效果。

总结起来,在Python中可以使用重写(override)来重新定义父类中的方法,但并不存在严格意义上的函数重载(overload),但能依靠参数的默认值、可变数量参数(*args、**kwargs)来达到类似重载的效果。

在Python中,重写(override)是指在子类中重新定义父类中已有的方法。通过重写,子类可以为继承自父类的方法提供自己的实现。

以下是一个示例:

class ParentClass:
    def some_method(self):
        print("This is the parent class method")

class ChildClass(ParentClass):
    def some_method(self):
        print("This is the child class method")

obj1 = ParentClass()  # 创建ParentClass的对象
obj1.some_method()  # 输出: This is the parent class method

obj2 = ChildClass() # 创建ChildClass的对象
obj2.some_method()  # 输出: This is the child class method

在上面的示例中,ChildClass继承自ParentClass,并重写了some_method方法。当创建ChildClass的对象并调用some_method方法时,将会执行子类中的方法而不是父类中的方法。

下面再给出一个复杂点的例子:

class Rectangle():
    def __init__(self,length,breadth):
        self.length = length
        self.breadth = breadth
    def area(self):
        print(self.length*self.breadth)
        
class Square(Rectangle):
    def __init__(self,side):
        self.side = side
        Rectangle.__init__(self,side,side)
    def area(self):
        print(self.side*self.side)

r = Rectangle(3,4) #创建矩形Rectangle的对象
r.area()  #输出:12

s = Square(4) #创正方形建Square的对象
s.area()  # 输出:16

在Python中,由于其动态类型的特性,没有像其他语言(如Java、C++)一样提供直接的方法重载机制。但是,可以使用一些技巧来实现类似的效果,例如可以使用默认参数值和可变参数(*args)来实现类似重载的效果。

1.通过为函数参数提供默认值,可以在调用函数时选择性地传递参数。例如,你可以定义一个函数,其中某些参数具有默认值,并在需要时覆盖这些默认值。

以下是一个示例:

def my_function(x, y=None):
    if y is None:
        # 执行无第二个参数的逻辑
        print("只有一个参数时:", x)
    else:
        # 执行有两个参数的逻辑
        print("有两个参数时:" , x , y)

# 只有一个参数时的函数调用
my_function(10) # 输出:只有一个参数时: 10

# 有两个参数时的函数调用
my_function(10, 20)  # 输出:有两个参数时: 10  20

在上面的示例中,y参数具有默认值None,如果没有显式提供参数y的值,则会执行只有一个参数的逻辑。

2.可变参数(*args)也可以用于实现类似重载的效果。以下是一个示例:

def my_function(*args):
    if len(args) == 1:
        # 执行只有一个位置参数的逻辑
        print("只有一个参数:", args[0])
    elif len(args) == 2:
        # 执行有两个位置参数的逻辑
        print("有两个参数:", args[0], args[1])

# 调用只有一个参数的函数
my_function(10) # 输出:只有一个参数: 10

# 调用有两个参数的函数
my_function(10, 20) #输出:有两个参数: 10 20

在上面的示例中,函数my_function,使用了可变数量的参数*args。根据args的长度来判断传入的参数数量,并执行相应的逻辑。

当调用my_function(10)时,args被打包成一个包含一个元素的元组(10,),并且len(args)为1,因此执行只有一个参数的逻辑。

当调用my_function(10, 20)时,args被打包成一个包含两个元素的元组(10, 20),len(args)为2,因此执行有两个参数的逻辑。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年11月28日
下一篇 2023年11月28日

相关推荐