python class中实现overloading
时间: 2023-05-26 18:02:03 浏览: 93
Python面向对象程序设计类的多态用法详解
Python 不支持真正的方法重载(overloading)。但可以使用默认参数和变长参数来模拟方法重载。
例如,假设我们有一个类 `Rectangle`,它有两个构造函数,一个以宽度和高度为参数创建一个矩形,另一个以两个对角坐标为参数创建矩形。
``` python
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def __init__(self, x1, y1, x2, y2):
self.x1 = x1
self.y1 = y1
self.x2 = x2
self.y2 = y2
```
这个类的第二个构造函数会覆盖第一个构造函数。但可以使用默认参数和变长参数来模仿方法重载,如下所示:
``` python
class Rectangle:
def __init__(self, *args):
if len(args) == 2:
self.width = args[0]
self.height = args[1]
elif len(args) == 4:
self.x1 = args[0]
self.y1 = args[1]
self.x2 = args[2]
self.y2 = args[3]
```
现在我们只有一个构造函数,它使用变长参数。它检查传递给函数的参数的数量,并根据参数数量初始化 `self` 对象的属性。如果参数数量为 2,它初始化 `width` 和 `height` 属性。如果参数数量为 4,它初始化 `x1`、`y1`、`x2` 和 `y2` 属性。如果我们调用 `Rectangle(10, 20)`,它将初始化 `width` 和 `height` 属性。如果我们调用 `Rectangle(0, 0, 100, 100)`,它将初始化 `x1`、`y1`、`x2` 和 `y2` 属性。这样,我们可以使用单个构造函数创建不同参数的对象。
阅读全文